From 08679b7db350af550eaa225964f536f183dfd047 Mon Sep 17 00:00:00 2001 From: Matthieu Haineault Date: Wed, 17 Dec 2025 08:42:32 -0500 Subject: [PATCH] feat(help): set-up function to build personnalized help in the help section --- docs/swagger/swagger-spec.json | 14 +++++++ .../home-page/home-page.controller.ts | 16 ++++++++ .../home-page/home-page.module.ts | 11 +++++ .../home-page/home-page.service.ts | 41 +++++++++++++++++++ .../identity-and-account.module.ts | 6 +++ 5 files changed, 88 insertions(+) create mode 100644 src/identity-and-account/home-page/home-page.controller.ts create mode 100644 src/identity-and-account/home-page/home-page.module.ts create mode 100644 src/identity-and-account/home-page/home-page.service.ts diff --git a/docs/swagger/swagger-spec.json b/docs/swagger/swagger-spec.json index 3e26950..828f8d6 100644 --- a/docs/swagger/swagger-spec.json +++ b/docs/swagger/swagger-spec.json @@ -823,6 +823,20 @@ "ModuleAccess" ] } + }, + "/help": { + "get": { + "operationId": "HomePageController_getIntroductionHelper", + "parameters": [], + "responses": { + "200": { + "description": "" + } + }, + "tags": [ + "HomePage" + ] + } } }, "info": { diff --git a/src/identity-and-account/home-page/home-page.controller.ts b/src/identity-and-account/home-page/home-page.controller.ts new file mode 100644 index 0000000..870f501 --- /dev/null +++ b/src/identity-and-account/home-page/home-page.controller.ts @@ -0,0 +1,16 @@ +import { Controller, Get } from "@nestjs/common"; +import { ModuleAccessAllowed } from "src/common/decorators/modules-guard.decorators"; +import { HomePageService } from "src/identity-and-account/home-page/home-page.service"; +import { Modules as ModulesEnum } from ".prisma/client"; +import { Access } from "src/common/decorators/module-access.decorators"; + +@Controller() +export class HomePageController { + constructor(private readonly homePageService: HomePageService) { } + + @Get('help') + @ModuleAccessAllowed(ModulesEnum.dashboard) + async getIntroductionHelper(@Access('email') email: string) { + return await this.homePageService.buildHomePageHelpMessage(email); + } +} \ No newline at end of file diff --git a/src/identity-and-account/home-page/home-page.module.ts b/src/identity-and-account/home-page/home-page.module.ts new file mode 100644 index 0000000..77c6ec8 --- /dev/null +++ b/src/identity-and-account/home-page/home-page.module.ts @@ -0,0 +1,11 @@ +import { Module } from "@nestjs/common"; +import { EmailToIdResolver } from "src/common/mappers/email-id.mapper"; +import { HomePageController } from "src/identity-and-account/home-page/home-page.controller"; +import { HomePageService } from "src/identity-and-account/home-page/home-page.service"; + +@Module({ + controllers: [HomePageController], + providers: [HomePageService, EmailToIdResolver], + exports: [HomePageService], +}) +export class HomePageModule { }; \ No newline at end of file diff --git a/src/identity-and-account/home-page/home-page.service.ts b/src/identity-and-account/home-page/home-page.service.ts new file mode 100644 index 0000000..bd49cfb --- /dev/null +++ b/src/identity-and-account/home-page/home-page.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from "@nestjs/common"; +import { Result } from "src/common/errors/result-error.factory"; +import { EmailToIdResolver } from "src/common/mappers/email-id.mapper"; +import { PrismaService } from "src/prisma/prisma.service"; + +@Injectable() +export class HomePageService { + constructor( + private readonly prisma: PrismaService, + private readonly emailresolver: EmailToIdResolver, + ) { } + + buildHomePageHelpMessage = async (email: string): Promise> => { + const user_id = await this.emailresolver.resolveUserIdWithEmail(email); + if (!user_id.success) return { success: false, error: 'INVALID_EMAIL' }; + + const module_access = await this.prisma.userModuleAccess.findUnique({ + where: { user_id: user_id.data }, + select: { + dashboard: true, + employee_list: true, + employee_management: true, + personal_profile: true, + timesheets: true, + timesheets_approval: true, + }, + }); + if (!module_access) return { success: false, error: 'MODULE_ACCESS_NOT_FOUND' }; + + const help_message: string[] = []; + + if (module_access.dashboard) help_message.push('dashboard'); + if (module_access.personal_profile) help_message.push('personnal_profile'); + if (module_access.timesheets) help_message.push('timesheets'); + if (module_access.employee_list) help_message.push('employee_list'); + if (module_access.employee_management) help_message.push('employee_management'); + if (module_access.timesheets_approval) help_message.push('timesheets_approval'); + + return { success: true, data: help_message }; + } +} \ No newline at end of file diff --git a/src/identity-and-account/identity-and-account.module.ts b/src/identity-and-account/identity-and-account.module.ts index d158ab3..90c6601 100644 --- a/src/identity-and-account/identity-and-account.module.ts +++ b/src/identity-and-account/identity-and-account.module.ts @@ -12,8 +12,11 @@ import { AccessGetService } from "src/identity-and-account/user-module-access/se import { AccessUpdateService } from "src/identity-and-account/user-module-access/services/module-access-update.service"; import { UsersService } from "src/identity-and-account/users-management/services/users.service"; import { UsersModule } from "src/identity-and-account/users-management/users.module"; +import { HomePageModule } from "src/identity-and-account/home-page/home-page.module"; import { EmployeesCreateService } from "src/identity-and-account/employees/services/employees-create.service"; import { EmployeesUpdateService } from "src/identity-and-account/employees/services/employees-update.service"; +import { HomePageController } from "src/identity-and-account/home-page/home-page.controller"; +import { HomePageService } from "src/identity-and-account/home-page/home-page.service"; @Module({ imports: [ @@ -21,11 +24,13 @@ import { EmployeesUpdateService } from "src/identity-and-account/employees/servi EmployeesModule, PreferencesModule, ModuleAccessModule, + HomePageModule, ], controllers: [ EmployeesController, PreferencesController, ModuleAccessController, + HomePageController, ], providers: [ EmployeesGetService, @@ -36,6 +41,7 @@ import { EmployeesUpdateService } from "src/identity-and-account/employees/servi EmailToIdResolver, AccessUpdateService, AccessGetService, + HomePageService, ], }) export class IdentityAndAccountModule { };