UNPKG

7.25 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
14var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
16var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
18var _mapKeys = _interopRequireDefault(require("@lskjs/utils/mapKeys"));
19
20var _mapValuesKeys = _interopRequireDefault(require("@lskjs/utils/mapValuesKeys"));
21
22var _tryJSONparse = _interopRequireDefault(require("@lskjs/utils/tryJSONparse"));
23
24var _tryJSONstringify = _interopRequireDefault(require("@lskjs/utils/tryJSONstringify"));
25
26var _isFinite = _interopRequireDefault(require("lodash/isFinite"));
27
28var _map = _interopRequireDefault(require("lodash/map"));
29
30var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
31
32var _snakeCase = _interopRequireDefault(require("lodash/snakeCase"));
33
34var notNan = function notNan(a) {
35 return (0, _isFinite["default"])(a) ? a : null;
36};
37
38var BaseScyllaModel = /*#__PURE__*/function () {
39 function BaseScyllaModel(_ref) {
40 var app = _ref.app;
41 (0, _classCallCheck2["default"])(this, BaseScyllaModel);
42 this.app = app;
43 this.log = app.log;
44 if (!this.schema) this.schema = this.getSchema();
45 }
46
47 (0, _createClass2["default"])(BaseScyllaModel, [{
48 key: "getSchema",
49 value: function getSchema() {
50 return {};
51 }
52 }, {
53 key: "stringifyData",
54 value: function stringifyData(data) {
55 var _this = this;
56
57 return (0, _mapValues["default"])(data, function (value, key) {
58 var type = _this.schema[key];
59
60 if (!type) {
61 _this.log.warn('missing field in schema: ', key);
62
63 return undefined;
64 }
65
66 if (['int', 'bigint', 'smallint'].includes(type)) return notNan(Number(value));
67 if (type === 'text<json>') return (0, _tryJSONstringify["default"])(value);
68 if (type === 'timestamp') return new Date(value).getTime();
69
70 if (type.startsWith('list')) {
71 var value2 = Array.isArray(value) ? value.filter(function (a) {
72 return a !== null && a !== undefined;
73 }) : null; // console.log({ value, value2 });
74
75 return value2;
76 }
77
78 return value;
79 });
80 }
81 }, {
82 key: "parseData",
83 value: function parseData(data) {
84 var _this2 = this;
85
86 return (0, _mapValuesKeys["default"])(data, function (value, key) {
87 var type = _this2.schema[key];
88 if (typeof value === 'undefined') return null;
89 if (type === 'text<json>') return {
90 key: key,
91 value: (0, _tryJSONparse["default"])(value)
92 };
93 if (type === 'timestamp') return {
94 key: key,
95 value: new Date(value)
96 };
97 return {
98 key: key,
99 value: value
100 };
101 });
102 }
103 }, {
104 key: "getSchemaString",
105 value: function getSchemaString() {
106 var schema = (0, _mapKeys["default"])(this.schema, function (value, key) {
107 var newKey = key[0] === '_' ? "_".concat((0, _snakeCase["default"])(key)) : (0, _snakeCase["default"])(key);
108 if (newKey[0] === '_') return "\"".concat(newKey, "\"");
109 return newKey;
110 });
111 return (0, _map["default"])(schema, function (value, key) {
112 return "".concat(key, " ").concat(value === 'text<json>' ? 'text' : value);
113 }).join(',\n');
114 }
115 }, {
116 key: "createInsertQuery",
117 value: function createInsertQuery(table, data) {
118 var keys = Object.keys(data);
119 var defaultKeyspace = this.scylla.config.defaultKeyspace;
120 return "INSERT INTO ".concat(defaultKeyspace, ".").concat(this.table, " (").concat(keys.map(function (key) {
121 return "\"".concat(key, "\"");
122 }).join(', '), ") VALUES (").concat(keys.map(function () {
123 return '?';
124 }).join(', '), ")");
125 }
126 }, {
127 key: "execute",
128 value: function () {
129 var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(query, values, options, json) {
130 var res;
131 return _regenerator["default"].wrap(function _callee$(_context) {
132 while (1) {
133 switch (_context.prev = _context.next) {
134 case 0:
135 if (this.scylla.debug) this.scylla.log.trace("[scylla] table=".concat(this.table, "\n"), query, values);
136 _context.prev = 1;
137 _context.next = 4;
138 return this.scylla.execute(query, values, options);
139
140 case 4:
141 res = _context.sent;
142 return _context.abrupt("return", res);
143
144 case 8:
145 _context.prev = 8;
146 _context.t0 = _context["catch"](1);
147 this.scylla.log.warn("[scylla] table=".concat(this.table, "\n"), query);
148 this.scylla.log.trace(json || values);
149 this.scylla.log.error('[scylla] err ', _context.t0);
150 throw _context.t0;
151
152 case 14:
153 case "end":
154 return _context.stop();
155 }
156 }
157 }, _callee, this, [[1, 8]]);
158 }));
159
160 function execute(_x, _x2, _x3, _x4) {
161 return _execute.apply(this, arguments);
162 }
163
164 return execute;
165 }()
166 }, {
167 key: "run",
168 value: function () {
169 var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
170 return _regenerator["default"].wrap(function _callee2$(_context2) {
171 while (1) {
172 switch (_context2.prev = _context2.next) {
173 case 0:
174 _context2.next = 2;
175 return this.app.module('scylla');
176
177 case 2:
178 this.scylla = _context2.sent;
179
180 case 3:
181 case "end":
182 return _context2.stop();
183 }
184 }
185 }, _callee2, this);
186 }));
187
188 function run() {
189 return _run.apply(this, arguments);
190 }
191
192 return run;
193 }()
194 }], [{
195 key: "run",
196 value: function () {
197 var _run2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(props) {
198 var obj;
199 return _regenerator["default"].wrap(function _callee3$(_context3) {
200 while (1) {
201 switch (_context3.prev = _context3.next) {
202 case 0:
203 obj = new this(props);
204 _context3.next = 3;
205 return obj.run();
206
207 case 3:
208 return _context3.abrupt("return", obj);
209
210 case 4:
211 case "end":
212 return _context3.stop();
213 }
214 }
215 }, _callee3, this);
216 }));
217
218 function run(_x5) {
219 return _run2.apply(this, arguments);
220 }
221
222 return run;
223 }()
224 }]);
225 return BaseScyllaModel;
226}();
227
228var _default = BaseScyllaModel;
229exports["default"] = _default;
230//# sourceMappingURL=BaseScyllaModel.js.map
\No newline at end of file