@lambda-group/charydbis
Version:
๐ NodeJS ScyllaDB ORM. ๐งช๐ง
125 lines (114 loc) โข 5.13 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _chunkHC6RU6YGjs = require('./chunk-HC6RU6YG.js');
var _chunkZIY2LTNAjs = require('./chunk-ZIY2LTNA.js');
var _chunkKI3NM7CIjs = require('./chunk-KI3NM7CI.js');
// src/repository/base.ts
var _Repository = class _Repository {
constructor(dataSource, modelClass) {
_chunkKI3NM7CIjs.__publicField.call(void 0, this, "dataSource");
_chunkKI3NM7CIjs.__publicField.call(void 0, this, "tableName");
_chunkKI3NM7CIjs.__publicField.call(void 0, this, "columns");
_chunkKI3NM7CIjs.__publicField.call(void 0, this, "modelClass");
_chunkKI3NM7CIjs.__publicField.call(void 0, this, "logger", new (0, _chunkHC6RU6YGjs.Logger)(_Repository.name));
var _a;
this.dataSource = dataSource;
this.tableName = modelClass.prototype.tableName;
this.columns = (_a = modelClass.columns) != null ? _a : [];
this.modelClass = modelClass;
}
columnToValue(column, row) {
switch (column.columnType) {
case _chunkZIY2LTNAjs.ColumnType.TEXT:
case _chunkZIY2LTNAjs.ColumnType.ASCII:
return row[column.columnName];
case _chunkZIY2LTNAjs.ColumnType.FLOAT:
return row[column.columnName];
case _chunkZIY2LTNAjs.ColumnType.TIMESTAMP:
case _chunkZIY2LTNAjs.ColumnType.DATE:
return new Date(row[column.columnName]);
case _chunkZIY2LTNAjs.ColumnType.UUID: {
if (typeof row[column.columnName] !== "string") throw new Error("UUID must be a string");
return row[column.columnName];
}
default:
return row[column.columnName];
}
}
findAll() {
return _chunkKI3NM7CIjs.__async.call(void 0, this, null, function* () {
const session = this.dataSource.getSession();
const columnNames = this.columns.map((col) => col.columnName).join(", ");
const query = `SELECT ${columnNames} FROM ${this.tableName}`;
this.logger.log(`Executing query: ${query}`);
return (yield session.execute(query, [])).map((row) => {
const model = new this.modelClass();
for (const col of this.columns) {
model[col.key] = this.columnToValue(col, row);
}
return model;
});
});
}
findBy(query) {
return _chunkKI3NM7CIjs.__async.call(void 0, this, null, function* () {
const session = this.dataSource.getSession();
const columnNames = this.columns.map((col) => col.columnName).join(", ");
const whereClause = Object.keys(query).filter((key) => key !== "allowFiltering").map((key) => {
const column = this.columns.find((col) => col.key === key);
if (!column) {
this.logger.error(`Column ${key} not found`);
throw new Error(`Column ${key} not found`);
}
return `${column.columnName} = ?`;
}).join(" AND ");
const values = Object.keys(query).filter((key) => key !== "allowFiltering").map((key) => query[key]);
const allowFiltering = query.allowFiltering ? " ALLOW FILTERING" : "";
const queryStr = `SELECT ${columnNames} FROM ${this.tableName} WHERE ${whereClause} ${allowFiltering}`;
this.logger.log(`Executing query: ${queryStr} with values: [${values}]`);
return (yield session.execute(queryStr, values)).map((row) => {
const model = new this.modelClass();
for (const col of this.columns) {
model[col.key] = this.columnToValue(col, row);
}
return model;
});
});
}
findByPartitionKey(id) {
return _chunkKI3NM7CIjs.__async.call(void 0, this, null, function* () {
const session = this.dataSource.getSession();
const columnNames = this.columns.map((col) => col.columnName).join(", ");
const partitionKey = this.columns.find((col) => col.partitionKey);
if (!partitionKey) {
this.logger.error("Primary key not found");
throw new Error("Primary key not found");
}
const query = `SELECT ${columnNames} FROM ${this.tableName} WHERE ${partitionKey.columnName} = ?`;
this.logger.log(`Executing query: ${query} with values: [${id}]`);
return (yield session.execute(query, [
id
])).map((row) => {
const model = new this.modelClass();
for (const col of this.columns) {
model[col.key] = this.columnToValue(col, row);
}
return model;
});
});
}
save(model) {
return _chunkKI3NM7CIjs.__async.call(void 0, this, null, function* () {
const session = this.dataSource.getSession();
const columnNames = this.columns.map((col) => col.columnName).join(", ");
const values = this.columns.map((col) => model[col.key]);
const placeholders = this.columns.map(() => "?").join(", ");
const query = `INSERT INTO ${this.tableName} (${columnNames}) VALUES (${placeholders})`;
this.logger.log(`Executing query: ${query} with values: ${values}`);
yield session.execute(query, values);
});
}
};
_chunkKI3NM7CIjs.__name.call(void 0, _Repository, "Repository");
var Repository = _Repository;
exports.Repository = Repository;
//# sourceMappingURL=chunk-T6N7BDB6.js.map