@cyber-rom/nestjs-scylladb
Version:
Based on https://www.npmjs.com/package/@ouato/nestjs-express-cassandra With support columns name mapping
86 lines • 3.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IndexColumn = exports.UpdateDateColumn = exports.CreateDateColumn = exports.VersionColumn = exports.GeneratedUUidColumn = exports.Column = void 0;
const common_1 = require("@nestjs/common");
const listeners_1 = require("./listeners");
const db_utils_1 = require("../utils/db.utils");
const decorator_utils_1 = require("../utils/decorator.utils");
function Column(options) {
return (target, propertyName) => {
(0, decorator_utils_1.addAttribute)(target, propertyName, options);
};
}
exports.Column = Column;
function GeneratedUUidColumn(type = 'uuid', name) {
return (target, propertyName) => {
if ((0, decorator_utils_1.hasAttribute)(target, propertyName)) {
common_1.Logger.warn(`Already exist attribute for property`, undefined, 'ScyllaModule');
}
Column({
name,
type,
default: { $db_function: type === 'timeuuid' ? 'now()' : 'uuid()' },
})(target, propertyName);
(0, listeners_1.BeforeSave)()(target, propertyName, {
value: (...args) => {
const instance = args[0];
if (instance !== null && !instance[propertyName]) {
instance[propertyName] = type === 'timeuuid' ? (0, db_utils_1.timeuuid)() : (0, db_utils_1.uuid)();
}
},
});
};
}
exports.GeneratedUUidColumn = GeneratedUUidColumn;
function VersionColumn(columnName) {
return (target, propertyName) => {
if ((0, decorator_utils_1.hasAttribute)(target, propertyName)) {
common_1.Logger.warn(`Already exist attribute for property (version column)`, undefined, 'ScyllaModule');
}
if (columnName) {
(0, decorator_utils_1.setTransformMapping)(target, propertyName, columnName);
}
(0, decorator_utils_1.addOptions)(target, { options: { versions: { key: columnName || propertyName } } });
};
}
exports.VersionColumn = VersionColumn;
function CreateDateColumn(columnName) {
return (target, propertyName) => {
if ((0, decorator_utils_1.hasAttribute)(target, propertyName)) {
common_1.Logger.warn(`Already exist attribute for property (create date column)`, undefined, 'ScyllaModule');
}
if (columnName) {
(0, decorator_utils_1.setTransformMapping)(target, propertyName, columnName);
}
(0, decorator_utils_1.addOptions)(target, {
options: { timestamps: { createdAt: columnName || propertyName } },
});
};
}
exports.CreateDateColumn = CreateDateColumn;
function UpdateDateColumn(columnName) {
return (target, propertyName) => {
if ((0, decorator_utils_1.hasAttribute)(target, propertyName)) {
common_1.Logger.warn(`Already exist attribute for property (update date column)`, undefined, 'ScyllaModule');
}
if (columnName) {
(0, decorator_utils_1.setTransformMapping)(target, propertyName, columnName);
}
(0, decorator_utils_1.addOptions)(target, {
options: { timestamps: { updatedAt: columnName || propertyName } },
});
};
}
exports.UpdateDateColumn = UpdateDateColumn;
function IndexColumn() {
return (target, propertyName) => {
const columnName = (0, decorator_utils_1.getColumnName)(target, propertyName);
const { indexes = [] } = (0, decorator_utils_1.getOptions)(target) || { indexes: [] };
if (indexes.some((value) => value === columnName)) {
return;
}
(0, decorator_utils_1.addOptions)(target, { indexes: [...indexes, columnName] });
};
}
exports.IndexColumn = IndexColumn;
//# sourceMappingURL=column.decorator.js.map