- Introduced language normalization utility functions to standardize language codes across the application. - Updated ContractUploadController to resolve requested language from contract data and user settings. - Enhanced authMiddleware to set preferred language in user object based on user settings. - Added preferred_language column to user_settings table in the database. - Implemented UserSettingsRepository to manage user settings, including preferred language updates. - Updated DocumentTemplateService and AboContractService to support language-specific templates. - Enhanced InvoiceService to select invoice templates based on normalized language codes. - Added new script to compare versions of ABO contract documents. - Refactored various services and repositories to utilize the new language normalization logic.
86 lines
3.4 KiB
JavaScript
86 lines
3.4 KiB
JavaScript
const UnitOfWork = require('../../database/UnitOfWork');
|
|
const UserSettingsRepository = require('../../repositories/settings/UserSettingsRepository');
|
|
const I18nPreferencesRepository = require('../../repositories/settings/I18nPreferencesRepository');
|
|
const { logger } = require('../../middleware/logger'); // <-- import logger
|
|
const { normalizeLanguageCode } = require('../../utils/languageUtils');
|
|
|
|
const i18nPreferencesRepository = new I18nPreferencesRepository();
|
|
|
|
async function resolvePreferredLanguage(rawValue) {
|
|
if (rawValue === undefined) return undefined;
|
|
if (rawValue === null || String(rawValue).trim() === '') return null;
|
|
|
|
const normalized = normalizeLanguageCode(rawValue);
|
|
if (!normalized) return '';
|
|
|
|
const languages = await i18nPreferencesRepository.listLanguages({ enabledOnly: true });
|
|
return languages.some((entry) => entry.languageCode === normalized) ? normalized : '';
|
|
}
|
|
|
|
class UserSettingsController {
|
|
static async getSettings(req, res) {
|
|
const userId = req.user.userId;
|
|
logger.info(`[UserSettingsController] getSettings called for userId: ${userId}`);
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const repo = new UserSettingsRepository(unitOfWork);
|
|
const settings = await repo.getSettingsByUserId(userId);
|
|
await unitOfWork.commit();
|
|
if (!settings) {
|
|
logger.warn(`[UserSettingsController] No settings found for userId: ${userId}`);
|
|
return res.status(404).json({ success: false, message: 'Settings not found' });
|
|
}
|
|
logger.info(`[UserSettingsController] getSettings success for userId: ${userId}`);
|
|
res.json({ success: true, settings });
|
|
} catch (error) {
|
|
logger.error(`[UserSettingsController] getSettings error for userId: ${userId}`, { error });
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async updateSettings(req, res) {
|
|
const userId = req.user.userId;
|
|
logger.info(`[UserSettingsController] updateSettings called for userId: ${userId}`);
|
|
|
|
const rawPreferredLanguage = req.body?.preferredLanguage
|
|
?? req.body?.preferred_language
|
|
?? req.body?.language
|
|
?? req.body?.lang;
|
|
|
|
if (rawPreferredLanguage === undefined) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'No supported settings payload provided',
|
|
});
|
|
}
|
|
|
|
const preferredLanguage = await resolvePreferredLanguage(rawPreferredLanguage);
|
|
if (preferredLanguage === '') {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Invalid preferred language',
|
|
});
|
|
}
|
|
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const repo = new UserSettingsRepository(unitOfWork);
|
|
const settings = await repo.updatePreferredLanguage(userId, preferredLanguage, unitOfWork);
|
|
await unitOfWork.commit();
|
|
logger.info(`[UserSettingsController] updateSettings success for userId: ${userId}`, {
|
|
preferredLanguage: settings?.preferred_language || null,
|
|
});
|
|
return res.json({ success: true, settings });
|
|
} catch (error) {
|
|
logger.error(`[UserSettingsController] updateSettings error for userId: ${userId}`, { error });
|
|
await unitOfWork.rollback(error);
|
|
return res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = UserSettingsController;
|