CentralBackend/controller/auth/UserSettingsController.js
seaznCode 427c12be3c feat: add language normalization and user settings updates
- 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.
2026-06-07 21:13:41 +02:00

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;