targo-backend/src/identity-and-account/preferences/services/preferences.service.ts
2025-11-27 15:23:19 -05:00

69 lines
3.1 KiB
TypeScript

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<Result<PreferencesDto, string>> {
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<Result<PreferencesDto, string>> {
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};
}
}