import { DisplayLanguage, PreferencesDto } from "../dtos/preferences.dto"; import { PrismaService } from "src/prisma/prisma.service"; import { Preferences } from "@prisma/client"; import { Injectable } from "@nestjs/common"; import { Result } from "src/common/errors/result-error.factory"; import { EmailToIdResolver } from "src/common/mappers/email-id.mapper"; @Injectable() export class PreferencesService { constructor( private readonly prisma: PrismaService, private readonly emailResolver: EmailToIdResolver, ) { } async findPreferences(email: string, employee_email?: string): Promise> { const account_email = employee_email ?? email; const user_id = await this.emailResolver.resolveUserIdWithEmail(account_email); if (!user_id.success) return { success: false, error: 'EMPLOYEE_NOT_FOUND' }; const user_preferences = await this.prisma.preferences.findUnique({ where: { user_id: user_id.data }, select: { notifications: true, is_dark_mode: true, display_language: true, is_lefty_mode: true, is_employee_list_grid: true, is_timesheet_approval_grid: true, }, }); if (!user_preferences) return { success: false, error: 'PREFERENCES_NOT_FOUND' }; const preferences: PreferencesDto = { is_dark_mode: user_preferences.is_dark_mode, display_language: user_preferences.display_language ?? DisplayLanguage.FR , is_lefty_mode: user_preferences.is_lefty_mode, notifications: user_preferences.notifications, is_employee_list_grid: user_preferences.is_employee_list_grid, is_timesheet_approval_grid: user_preferences.is_timesheet_approval_grid, }; return { success: true, data: preferences }; } async updatePreferences(email: string, dto: PreferencesDto): Promise> { const user_id = await this.emailResolver.resolveUserIdWithEmail(email); if (!user_id.success) return { success: false, error: user_id.error } const updated_preferences: PreferencesDto = await this.prisma.preferences.update({ where: { user_id: user_id.data }, data: { notifications: dto.notifications, is_dark_mode: dto.is_dark_mode ?? undefined, display_language: dto.display_language, is_lefty_mode: dto.is_lefty_mode, is_employee_list_grid: dto.is_employee_list_grid, is_timesheet_approval_grid: dto.is_timesheet_approval_grid, }, select: { notifications: true, is_dark_mode: true, display_language: true, is_employee_list_grid: true, is_timesheet_approval_grid: true, is_lefty_mode: true, }, }); return { success: true, data: updated_preferences}; } }