Improve centralized error handling

This commit is contained in:
richardtekula
2025-12-04 07:39:52 +01:00
parent 109cae1167
commit 35dfa07668
14 changed files with 266 additions and 336 deletions

View File

@@ -4,13 +4,12 @@ import {
logPasswordChange,
logEmailLink,
} from '../services/audit.service.js';
import { formatErrorResponse } from '../utils/errors.js';
/**
* KROK 1: Login s temporary password
* POST /api/auth/login
*/
export const login = async (req, res) => {
export const login = async (req, res, next) => {
const { username, password } = req.body;
const ipAddress = req.ip || req.connection.remoteAddress;
const userAgent = req.headers['user-agent'];
@@ -55,8 +54,7 @@ export const login = async (req, res) => {
// Log failed login
await logLoginAttempt(username, false, ipAddress, userAgent, error.message);
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -65,7 +63,7 @@ export const login = async (req, res) => {
* POST /api/auth/set-password
* Requires: authentication
*/
export const setPassword = async (req, res) => {
export const setPassword = async (req, res, next) => {
const { newPassword } = req.body;
const userId = req.userId;
const ipAddress = req.ip || req.connection.remoteAddress;
@@ -83,8 +81,7 @@ export const setPassword = async (req, res) => {
message: 'Heslo úspešne nastavené',
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -93,7 +90,7 @@ export const setPassword = async (req, res) => {
* POST /api/auth/link-email
* Requires: authentication
*/
export const linkEmail = async (req, res) => {
export const linkEmail = async (req, res, next) => {
const { email, emailPassword } = req.body;
const userId = req.userId;
const ipAddress = req.ip || req.connection.remoteAddress;
@@ -114,8 +111,7 @@ export const linkEmail = async (req, res) => {
message: 'Email účet úspešne pripojený a overený',
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -124,7 +120,7 @@ export const linkEmail = async (req, res) => {
* POST /api/auth/skip-email
* Requires: authentication
*/
export const skipEmail = async (req, res) => {
export const skipEmail = async (req, res, next) => {
const userId = req.userId;
try {
@@ -136,8 +132,7 @@ export const skipEmail = async (req, res) => {
message: 'Email setup preskočený',
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -146,7 +141,7 @@ export const skipEmail = async (req, res) => {
* POST /api/auth/logout
* Requires: authentication
*/
export const logout = async (req, res) => {
export const logout = async (req, res, next) => {
try {
const result = await authService.logout();
@@ -159,8 +154,7 @@ export const logout = async (req, res) => {
message: result.message,
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -169,7 +163,7 @@ export const logout = async (req, res) => {
* GET /api/auth/session
* Requires: authentication
*/
export const getSession = async (req, res) => {
export const getSession = async (req, res, next) => {
try {
res.status(200).json({
success: true,
@@ -179,8 +173,7 @@ export const getSession = async (req, res) => {
},
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};
@@ -189,7 +182,7 @@ export const getSession = async (req, res) => {
* GET /api/auth/me
* Requires: authentication
*/
export const getMe = async (req, res) => {
export const getMe = async (req, res, next) => {
try {
res.status(200).json({
success: true,
@@ -198,7 +191,6 @@ export const getMe = async (req, res) => {
},
});
} catch (error) {
const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development');
res.status(error.statusCode || 500).json(errorResponse);
next(error);
}
};