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
JavaScript
"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