@cyber-rom/nestjs-scylladb
Version:
Based on https://www.npmjs.com/package/@ouato/nestjs-express-cassandra With support columns name mapping
134 lines • 7.89 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Repository = void 0;
const operators_1 = require("rxjs/operators");
const rxjs_1 = require("rxjs");
const transform_query_utils_1 = require("../utils/transform-query.utils");
const transform_entity_utils_1 = require("../utils/transform-entity.utils");
const errors_1 = require("../errors");
const defaultOptions = {
findOptions: { raw: true },
updateOptions: { if_exists: true },
deleteOptions: { if_exists: true },
};
class Repository {
create(entityLike) {
return (0, transform_entity_utils_1.transformFrom)(this.target, entityLike);
}
count(query, key) {
return new rxjs_1.Observable((subscriber) => {
this.model.execute_query(`SELECT COUNT(${key ? (0, transform_query_utils_1.transformKey)(this.target, key) : '*'}) FROM "${this.model.get_keyspace_name()}"."${this.model.get_table_name()}";`, [], (error, value) => {
if (error) {
return subscriber.error(error);
}
subscriber.next(parseInt(value, 10) || 0);
subscriber.complete();
});
});
}
findOne(query, options = {}) {
return (0, rxjs_1.defer)(() => this.model.findOneAsync((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign(Object.assign({}, options), defaultOptions.findOptions), { select: (0, transform_query_utils_1.transformQuerySelect)(this.target, options === null || options === void 0 ? void 0 : options.select) }))).pipe((0, operators_1.map)((x) => x && (0, transform_entity_utils_1.transformFrom)(this.target, x)));
}
findOneOrFail(query, maybeOptions = {}) {
return this.findOne((0, transform_query_utils_1.transformQuery)(this.target, query), maybeOptions).pipe((0, operators_1.map)((entity) => {
if (entity === undefined) {
throw new errors_1.EntityNotFoundError(this.target, query);
}
return entity;
}));
}
find(query, options = {}) {
return (0, rxjs_1.defer)(() => this.model.findAsync((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign(Object.assign({}, options), defaultOptions.findOptions), { select: (0, transform_query_utils_1.transformQuerySelect)(this.target, options === null || options === void 0 ? void 0 : options.select) }))).pipe((0, operators_1.map)((x) => (0, transform_entity_utils_1.transformFrom)(this.target, x)));
}
findAndCount(query, options = {}) {
return (0, rxjs_1.defer)(() => this.model.findAsync((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign(Object.assign({}, options), defaultOptions.findOptions), { select: (0, transform_query_utils_1.transformQuerySelect)(this.target, options === null || options === void 0 ? void 0 : options.select) }))).pipe((0, operators_1.map)((x) => (0, transform_entity_utils_1.transformFrom)(this.target, x)), (0, operators_1.map)((entities) => [entities, entities.length]));
}
save(entityLike, options = {}) {
const saveFunc = (entity) => __awaiter(this, void 0, void 0, function* () {
const model = new this.model((0, transform_entity_utils_1.transformTo)(this.target, entity));
yield model.saveAsync(options);
return (0, transform_entity_utils_1.transformFrom)(this.target, model.toJSON());
});
const saveMultipleFunc = (arrayLike) => Promise.all(arrayLike.map((x) => saveFunc(x)));
return Array.isArray(entityLike)
? (0, rxjs_1.defer)(() => saveMultipleFunc(entityLike))
: (0, rxjs_1.defer)(() => saveFunc(entityLike));
}
update(query, updateValue, options = {}) {
return (0, rxjs_1.defer)(() => this.model.updateAsync((0, transform_query_utils_1.transformQuery)(this.target, query), (0, transform_query_utils_1.transformQuery)(this.target, updateValue), Object.assign(Object.assign({}, defaultOptions.updateOptions), options)));
}
remove(entityOrEntities, options = {}) {
const removeFunc = (entity) => new this.model((0, transform_entity_utils_1.transformTo)(this.target, entity)).deleteAsync(Object.assign(Object.assign({}, defaultOptions.deleteOptions), options));
const promiseArray = Array.isArray(entityOrEntities)
? entityOrEntities.map((x) => removeFunc(x))
: [removeFunc(entityOrEntities)];
return (0, rxjs_1.defer)(() => Promise.all(promiseArray)).pipe((0, operators_1.map)(() => entityOrEntities));
}
delete(query = {}, options = {}) {
return (0, rxjs_1.defer)(() => this.model.deleteAsync((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign({}, defaultOptions.deleteOptions), options)));
}
truncate() {
return (0, rxjs_1.defer)(() => this.model.truncateAsync());
}
stream(query, options = {}) {
const reader$ = new rxjs_1.Subject();
const onRead = (reader) => {
while (true) {
const row = reader.readRow();
if (row === null) {
break;
}
reader$.next((0, transform_entity_utils_1.transformFrom)(this.target, row));
}
};
const onDone = (error) => {
if (error) {
reader$.error(error);
}
reader$.complete();
return;
};
this.model.stream((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign(Object.assign({}, options), defaultOptions.findOptions), { select: (0, transform_query_utils_1.transformQuerySelect)(this.target, options === null || options === void 0 ? void 0 : options.select) }), onRead, onDone);
return reader$.asObservable();
}
eachRow(query, options = {}) {
const reader$ = new rxjs_1.Subject();
const done$ = new rxjs_1.Subject();
const getReader = () => reader$.asObservable();
const getDone = () => done$.asObservable();
const onRow = (n, row) => reader$.next((0, transform_entity_utils_1.transformFrom)(this.target, row));
const onDone = (err, result) => {
if (err) {
reader$.error(err);
done$.error(err);
}
else {
done$.next(result);
}
reader$.complete();
done$.complete();
};
this.model.eachRow((0, transform_query_utils_1.transformQuery)(this.target, query), Object.assign(Object.assign(Object.assign({}, options), defaultOptions.findOptions), { select: (0, transform_query_utils_1.transformQuerySelect)(this.target, options === null || options === void 0 ? void 0 : options.select) }), onRow, onDone);
return { getReader, getDone };
}
get getModelRef() {
return this.model;
}
getReturnQueryBuilder() {
return this.returnQueryBuilder;
}
doBatch(queries) {
return this.model.execute_batchAsync(queries);
}
}
exports.Repository = Repository;
//# sourceMappingURL=repository.js.map