@gp_jcisneros/errors
Version:
Error handling utilities for GreenPay microservices and validation middleware
119 lines (107 loc) • 3.21 kB
JavaScript
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 };