initialize git, basic setup for crm

This commit is contained in:
richardtekula
2025-11-18 13:53:28 +01:00
commit da01d586fc
47 changed files with 12776 additions and 0 deletions

82
src/utils/errors.js Normal file
View File

@@ -0,0 +1,82 @@
/**
* Custom error classes pre aplikáciu
*/
export class AppError extends Error {
constructor(message, statusCode = 500, details = null) {
super(message);
this.statusCode = statusCode;
this.details = details;
this.isOperational = true;
Error.captureStackTrace(this, this.constructor);
}
}
export class ValidationError extends AppError {
constructor(message, details = null) {
super(message, 400, details);
this.name = 'ValidationError';
}
}
export class AuthenticationError extends AppError {
constructor(message = 'Neautorizovaný prístup') {
super(message, 401);
this.name = 'AuthenticationError';
}
}
export class ForbiddenError extends AppError {
constructor(message = 'Prístup zamietnutý') {
super(message, 403);
this.name = 'ForbiddenError';
}
}
export class NotFoundError extends AppError {
constructor(message = 'Nenájdené') {
super(message, 404);
this.name = 'NotFoundError';
}
}
export class ConflictError extends AppError {
constructor(message = 'Konflikt') {
super(message, 409);
this.name = 'ConflictError';
}
}
export class RateLimitError extends AppError {
constructor(message = 'Príliš veľa požiadaviek') {
super(message, 429);
this.name = 'RateLimitError';
}
}
/**
* Error response formatter
* @param {Error} error
* @param {boolean} includeStack - Či má zahrnúť stack trace (len development)
* @returns {Object} Formatted error response
*/
export const formatErrorResponse = (error, includeStack = false) => {
const response = {
success: false,
error: {
message: error.message || 'Interná chyba servera',
statusCode: error.statusCode || 500,
},
};
if (error.details) {
response.error.details = error.details;
}
if (includeStack && process.env.NODE_ENV === 'development') {
response.error.stack = error.stack;
}
return response;
};