UNPKG

@gp_jcisneros/errors

Version:

Error handling utilities for GreenPay microservices

119 lines (107 loc) 3.21 kB
const { CustomError } = require('./CustomError'); /** * Database error class for database operation failures */ class DatabaseError extends CustomError { constructor(message, operation = null, table = null) { super(message, { errorCode: operation ? `DB_${operation}`.toUpperCase() : 'DB_UNKNOWN', description: message, integration: 'database-service', statusCode: 500 }); this.name = 'DatabaseError'; this.type = 'DATABASE_ERROR'; this.operation = operation; this.table = table; } /** * Create a connection error * @param {string} message - Error message * @returns {DatabaseError} - Connection error */ static connection(message = 'Database connection failed') { return new DatabaseError(message, 'CONNECT'); } /** * Create a query error * @param {string} message - Error message * @param {string} table - Table name * @returns {DatabaseError} - Query error */ static query(message, table = null) { return new DatabaseError(message, 'QUERY', table); } /** * Create an insert error * @param {string} message - Error message * @param {string} table - Table name * @returns {DatabaseError} - Insert error */ static insert(message, table = null) { return new DatabaseError(message, 'INSERT', table); } /** * Create an update error * @param {string} message - Error message * @param {string} table - Table name * @returns {DatabaseError} - Update error */ static update(message, table = null) { return new DatabaseError(message, 'UPDATE', table); } /** * Create a delete error * @param {string} message - Error message * @param {string} table - Table name * @returns {DatabaseError} - Delete error */ static delete(message, table = null) { return new DatabaseError(message, 'DELETE', table); } /** * Create a not found error * @param {string} table - Table name * @returns {DatabaseError} - Not found error */ static notFound(table) { const message = `Record not found in ${table}`; return new DatabaseError(message, 'GET', table); } /** * Create a duplicate key error * @param {string} table - Table name * @param {string} field - Field name * @returns {DatabaseError} - Duplicate key error */ static duplicateKey(table, field) { const message = `Duplicate ${field} in ${table}`; return new DatabaseError(message, 'INSERT', table); } /** * Create a constraint violation error * @param {string} message - Error message * @param {string} table - Table name * @returns {DatabaseError} - Constraint violation error */ static constraintViolation(message, table = null) { return new DatabaseError(message, 'CONSTRAINT', table); } /** * Get database error details * @returns {Object} - Database error details */ getDatabaseDetails() { return { operation: this.operation, table: this.table, message: this.message, type: this.type, // Required fields errorCode: this.errorCode, description: this.description, integration: this.integration, }; } } module.exports = { DatabaseError };