UNPKG

axiodb

Version:

The Pure JavaScript Alternative to SQLite. Embedded NoSQL database for Node.js with MongoDB-style queries, zero native dependencies, built-in InMemoryCache, and web GUI. Perfect for desktop apps, CLI tools, and embedded systems. No compilation, no platfor

310 lines 12.5 kB
"use strict"; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const keys_1 = require("../../config/keys"); const CRUD_controller_1 = __importDefault(require("../../../server/controller/Operation/CRUD.controller")); /** * Operation Handler - Handles CRUD operation TCP commands * Reuses existing CRUDController logic */ class OperationHandler { constructor(axioDB) { this.axioDB = axioDB; this.controller = new CRUD_controller_1.default(axioDB); } /** * Handle INSERT_DOCUMENT command */ handleInsertDocument(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, data } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName }, body: data, }; const result = yield this.controller.createNewDocument(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle INSERT_MANY_DOCUMENTS command */ handleInsertManyDocuments(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, documents } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName }, body: documents, }; const result = yield this.controller.createManyNewDocument(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle QUERY_DOCUMENTS command */ handleQueryDocuments(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, query = {}, limit, skip, sort, findOne } = params; try { const databaseInstance = yield this.axioDB.createDB(dbName); const collection = yield databaseInstance.createCollection(collectionName); // Build query with options let queryBuilder = collection.query(query); if (limit !== undefined) { queryBuilder = queryBuilder.Limit(limit); } if (skip !== undefined) { queryBuilder = queryBuilder.Skip(skip); } if (sort) { queryBuilder = queryBuilder.Sort(sort); } if (findOne) { queryBuilder = queryBuilder.findOne(findOne); } const result = yield queryBuilder.exec(); return { id: requestId, statusCode: keys_1.StatusCode.OK, message: 'Documents retrieved successfully', data: result, }; } catch (error) { return { id: requestId, statusCode: keys_1.StatusCode.INTERNAL_SERVER_ERROR, message: error instanceof Error ? error.message : String(error), error: error instanceof Error ? error.message : String(error), }; } }); } /** * Handle QUERY_BY_ID command */ handleQueryById(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, id: documentId } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName, documentId }, }; const result = yield this.controller.getDocumentsById(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle UPDATE_DOCUMENT_BY_ID command */ handleUpdateById(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, id: documentId, updateData } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName, documentId }, body: updateData, }; const result = yield this.controller.updateDocumentById(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle UPDATE_DOCUMENTS_BY_QUERY command */ handleUpdateByQuery(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, query, updateData, updateOne = true } = params; const isMany = !updateOne; // Create mock request object const mockRequest = { query: { dbName, collectionName, isMany }, body: { query, update: updateData }, }; const result = yield this.controller.updateDocumentByQuery(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle DELETE_DOCUMENT_BY_ID command */ handleDeleteById(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, id: documentId } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName, documentId }, }; const result = yield this.controller.deleteDocumentById(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle DELETE_DOCUMENTS_BY_QUERY command */ handleDeleteByQuery(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, query, deleteOne = true } = params; const isMany = !deleteOne; // Create mock request object const mockRequest = { query: { dbName, collectionName, isMany }, body: { query }, }; const result = yield this.controller.deleteDocumentByQuery(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle AGGREGATE command */ handleAggregate(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, pipeline } = params; // Create mock request object const mockRequest = { query: { dbName, collectionName }, body: { aggregation: pipeline }, }; const result = yield this.controller.runAggregation(mockRequest); return { id: requestId, statusCode: result.statusCode, message: result.message, data: result.data, }; }); } /** * Handle TOTAL_DOCUMENTS command */ handleTotalDocuments(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName } = params; try { const databaseInstance = yield this.axioDB.createDB(dbName); const collection = yield databaseInstance.createCollection(collectionName); const result = yield collection.totalDocuments(); return { id: requestId, statusCode: result.statusCode, message: 'message' in result ? result.message || 'Total documents retrieved successfully' : 'Total documents retrieved successfully', data: result.data, }; } catch (error) { return { id: requestId, statusCode: keys_1.StatusCode.INTERNAL_SERVER_ERROR, message: error instanceof Error ? error.message : String(error), error: error instanceof Error ? error.message : String(error), }; } }); } /** * Handle CREATE_INDEX command */ handleCreateIndex(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, fieldNames } = params; try { const databaseInstance = yield this.axioDB.createDB(dbName); const collection = yield databaseInstance.createCollection(collectionName); const result = yield collection.newIndex(...fieldNames); return { id: requestId, statusCode: result ? result.statusCode : keys_1.StatusCode.OK, message: result && 'message' in result ? result.message || 'Index created successfully' : 'Index created successfully', data: result ? result.data : undefined, }; } catch (error) { return { id: requestId, statusCode: keys_1.StatusCode.INTERNAL_SERVER_ERROR, message: error instanceof Error ? error.message : String(error), error: error instanceof Error ? error.message : String(error), }; } }); } /** * Handle DROP_INDEX command */ handleDropIndex(requestId, params) { return __awaiter(this, void 0, void 0, function* () { const { dbName, collectionName, indexName } = params; try { const databaseInstance = yield this.axioDB.createDB(dbName); const collection = yield databaseInstance.createCollection(collectionName); const result = yield collection.dropIndex(indexName); return { id: requestId, statusCode: result ? result.statusCode : keys_1.StatusCode.OK, message: result && 'message' in result ? result.message || 'Index dropped successfully' : 'Index dropped successfully', data: result ? result.data : undefined, }; } catch (error) { return { id: requestId, statusCode: keys_1.StatusCode.INTERNAL_SERVER_ERROR, message: error instanceof Error ? error.message : String(error), error: error instanceof Error ? error.message : String(error), }; } }); } } exports.default = OperationHandler; //# sourceMappingURL=Operation.handler.js.map