Refactor error handling in routes to use centralized error creation. Added localized error messages for IP address and email validation in respective routes. Improved session retrieval error handling.

This commit is contained in:
2026-01-13 16:16:01 +05:00
parent b6ea9107e8
commit 6a5754e8c2
5 changed files with 210 additions and 13 deletions
+126
View File
@@ -0,0 +1,126 @@
import { Request } from "express";
import { ErrorCode, ErrorResponse } from "../types/errorCodes";
type Language = "RU" | "EN";
interface Translations {
[key: string]: {
EN: string;
RU: string;
};
}
const translations: Translations = {
// General errors
INTERNAL_ERROR: {
EN: "Internal server error",
RU: "Внутренняя ошибка сервера",
},
// Active Session errors
INVALID_OBJECT_ID: {
EN: "Invalid ObjectId",
RU: "Неверный идентификатор объекта",
},
SESSION_NOT_FOUND: {
EN: "Session not found",
RU: "Сессия не найдена",
},
SESSION_FETCH_ERROR: {
EN: "Error fetching session",
RU: "Ошибка получения сессии",
},
// Country Code errors
IP_ADDRESS_ERROR: {
EN: "An error occurred while obtaining an IP address",
RU: "Произошла ошибка при получении IP-адреса",
},
COUNTRY_CODE_FETCH_ERROR: {
EN: "Error fetching country code",
RU: "Ошибка получения кода страны",
},
// Email/Invite errors
EMAIL_REQUIRED: {
EN: "Email is required",
RU: "Требуется адрес электронной почты",
},
LINK_REQUIRED: {
EN: "Link is required",
RU: "Требуется ссылка",
},
EMAIL_SEND_ERROR: {
EN: "Error sending email",
RU: "Ошибка отправки письма",
},
EMAIL_SENT_SUCCESS: {
EN: "Invitation sent successfully",
RU: "Приглашение успешно отправлено",
},
};
/**
* Получает язык из заголовка X-User-Region
* @param req - Express Request объект
* @returns Код языка (EN или RU)
*/
export function getLanguageFromRequest(req: Request): Language {
const region = req.headers["x-user-region"] as string;
// Поддерживаемые русскоязычные регионы
const russianRegions = ["RU", "BY", "KZ", "UA"];
if (region && russianRegions.includes(region.toUpperCase())) {
return "RU";
}
return "EN";
}
/**
* Получает переведенное сообщение
* @param key - Ключ сообщения из translations
* @param req - Express Request объект
* @returns Переведенное сообщение
*/
export function t(key: string, req: Request): string {
const lang = getLanguageFromRequest(req);
if (translations[key]) {
return translations[key][lang];
}
// Возвращаем ключ, если перевод не найден
return key;
}
/**
* Получает переведенное сообщение для конкретного языка
* @param key - Ключ сообщения из translations
* @param lang - Код языка
* @returns Переведенное сообщение
*/
export function tLang(key: string, lang: Language = "EN"): string {
if (translations[key]) {
return translations[key][lang];
}
return key;
}
/**
* Создает объект ошибки с кодом и переведенным сообщением
* @param errorCode - Код ошибки из ErrorCode enum
* @param req - Express Request объект
* @returns Объект с ошибкой и кодом ошибки
*/
export function createError(errorCode: ErrorCode, req: Request): ErrorResponse {
return {
error: t(errorCode, req),
errorCode: errorCode,
};
}
export { ErrorCode } from "../types/errorCodes";
export default { t, getLanguageFromRequest, tLang, createError };