refactor(preferences & modules): changed type from boolean to Int so each preferences can have more than 2 options.
Also cleaned-up module imports/providers
This commit is contained in:
parent
6a4fbeb2c4
commit
9efdafb20f
|
|
@ -1065,6 +1065,39 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"/preferences/{email}": {
|
||||
"patch": {
|
||||
"operationId": "PreferencesController_updatePreferences",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "email",
|
||||
"required": true,
|
||||
"in": "path",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PreferencesDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"Preferences"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/schedule-presets/{email}": {
|
||||
"put": {
|
||||
"operationId": "SchedulePresetsController_upsert",
|
||||
|
|
@ -1666,6 +1699,10 @@
|
|||
"employees_overview"
|
||||
]
|
||||
},
|
||||
"PreferencesDto": {
|
||||
"type": "object",
|
||||
"properties": {}
|
||||
},
|
||||
"SchedulePresetsDto": {
|
||||
"type": "object",
|
||||
"properties": {}
|
||||
|
|
|
|||
64
package-lock.json
generated
64
package-lock.json
generated
|
|
@ -51,7 +51,7 @@
|
|||
"globals": "^16.0.0",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.4.2",
|
||||
"prisma": "^6.16.3",
|
||||
"prisma": "^6.17.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^7.0.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
|
|
@ -3148,9 +3148,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@prisma/config": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.16.3.tgz",
|
||||
"integrity": "sha512-VlsLnG4oOuKGGMToEeVaRhoTBZu5H3q51jTQXb/diRags3WV0+BQK5MolJTtP6G7COlzoXmWeS11rNBtvg+qFQ==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.17.0.tgz",
|
||||
"integrity": "sha512-k8tuChKpkO/Vj7ZEzaQMNflNGbaW4X0r8+PC+W2JaqVRdiS2+ORSv1SrDwNxsb8YyzIQJucXqLGZbgxD97ZhsQ==",
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"c12": "3.1.0",
|
||||
|
|
@ -3160,48 +3160,48 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@prisma/debug": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.16.3.tgz",
|
||||
"integrity": "sha512-89DdqWtdKd7qoc9/qJCKLTazj3W3zPEiz0hc7HfZdpjzm21c7orOUB5oHWJsG+4KbV4cWU5pefq3CuDVYF9vgA==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.17.0.tgz",
|
||||
"integrity": "sha512-eE2CB32nr1hRqyLVnOAVY6c//iSJ/PN+Yfoa/2sEzLGpORaCg61d+nvdAkYSh+6Y2B8L4BVyzkRMANLD6nnC2g==",
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/@prisma/engines": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.16.3.tgz",
|
||||
"integrity": "sha512-b+Rl4nzQDcoqe6RIpSHv8f5lLnwdDGvXhHjGDiokObguAAv/O1KaX1Oc69mBW/GFWKQpCkOraobLjU6s1h8HGg==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.17.0.tgz",
|
||||
"integrity": "sha512-XhE9v3hDQTNgCYMjogcCYKi7HCEkZf9WwTGuXy8cmY8JUijvU0ap4M7pGLx4pBblkp5EwUsYzw1YLtH7yi0GZw==",
|
||||
"devOptional": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.16.3",
|
||||
"@prisma/engines-version": "6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a",
|
||||
"@prisma/fetch-engine": "6.16.3",
|
||||
"@prisma/get-platform": "6.16.3"
|
||||
"@prisma/debug": "6.17.0",
|
||||
"@prisma/engines-version": "6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a",
|
||||
"@prisma/fetch-engine": "6.17.0",
|
||||
"@prisma/get-platform": "6.17.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/engines-version": {
|
||||
"version": "6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a.tgz",
|
||||
"integrity": "sha512-fftRmosBex48Ph1v2ll1FrPpirwtPZpNkE5CDCY1Lw2SD2ctyrLlVlHiuxDAAlALwWBOkPbAll4+EaqdGuMhJw==",
|
||||
"version": "6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a.tgz",
|
||||
"integrity": "sha512-G0VU4uFDreATgTz4sh3dTtU2C+jn+J6c060ixavWZaUaSRZsNQhSPW26lbfez7GHzR02RGCdqs5UcSuGBC3yLw==",
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/@prisma/fetch-engine": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.16.3.tgz",
|
||||
"integrity": "sha512-bUoRIkVaI+CCaVGrSfcKev0/Mk4ateubqWqGZvQ9uCqFv2ENwWIR3OeNuGin96nZn5+SkebcD7RGgKr/+mJelw==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.17.0.tgz",
|
||||
"integrity": "sha512-YSl5R3WIAPrmshYPkaaszOsBIWRAovOCHn3y7gkTNGG51LjYW4pi6PFNkGouW6CA06qeTjTbGrDRCgFjnmVWDg==",
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.16.3",
|
||||
"@prisma/engines-version": "6.16.1-1.bb420e667c1820a8c05a38023385f6cc7ef8e83a",
|
||||
"@prisma/get-platform": "6.16.3"
|
||||
"@prisma/debug": "6.17.0",
|
||||
"@prisma/engines-version": "6.17.0-16.c0aafc03b8ef6cdced8654b9a817999e02457d6a",
|
||||
"@prisma/get-platform": "6.17.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/get-platform": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.16.3.tgz",
|
||||
"integrity": "sha512-X1LxiFXinJ4iQehrodGp0f66Dv6cDL0GbRlcCoLtSu6f4Wi+hgo7eND/afIs5029GQLgNWKZ46vn8hjyXTsHLA==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.17.0.tgz",
|
||||
"integrity": "sha512-3tEKChrnlmLXPd870oiVfRvj7vVKuxqP349hYaMDsbV4TZd3+lFqw8KTI2Tbq5DopamfNuNqhVCj+R6ZxKKYGQ==",
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.16.3"
|
||||
"@prisma/debug": "6.17.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@scarf/scarf": {
|
||||
|
|
@ -10049,14 +10049,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/prisma": {
|
||||
"version": "6.16.3",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.16.3.tgz",
|
||||
"integrity": "sha512-4tJq3KB9WRshH5+QmzOLV54YMkNlKOtLKaSdvraI5kC/axF47HuOw6zDM8xrxJ6s9o2WodY654On4XKkrobQdQ==",
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.17.0.tgz",
|
||||
"integrity": "sha512-rcvldz98r+2bVCs0MldQCBaaVJRCj9Ew4IqphLATF89OJcSzwRQpwnKXR+W2+2VjK7/o2x3ffu5+2N3Muu6Dbw==",
|
||||
"devOptional": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@prisma/config": "6.16.3",
|
||||
"@prisma/engines": "6.16.3"
|
||||
"@prisma/config": "6.17.0",
|
||||
"@prisma/engines": "6.17.0"
|
||||
},
|
||||
"bin": {
|
||||
"prisma": "build/index.js"
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@
|
|||
"globals": "^16.0.0",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.4.2",
|
||||
"prisma": "^6.16.3",
|
||||
"prisma": "^6.17.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^7.0.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
Warnings:
|
||||
|
||||
- The `notifications` column on the `preferences` table would be dropped and recreated. This will lead to data loss if there is data in the column.
|
||||
- The `dark_mode` column on the `preferences` table would be dropped and recreated. This will lead to data loss if there is data in the column.
|
||||
- The `lang_switch` column on the `preferences` table would be dropped and recreated. This will lead to data loss if there is data in the column.
|
||||
- The `lefty_mode` column on the `preferences` table would be dropped and recreated. This will lead to data loss if there is data in the column.
|
||||
|
||||
*/
|
||||
-- AlterTable
|
||||
ALTER TABLE "preferences" DROP COLUMN "notifications",
|
||||
ADD COLUMN "notifications" INTEGER NOT NULL DEFAULT 0,
|
||||
DROP COLUMN "dark_mode",
|
||||
ADD COLUMN "dark_mode" INTEGER NOT NULL DEFAULT 0,
|
||||
DROP COLUMN "lang_switch",
|
||||
ADD COLUMN "lang_switch" INTEGER NOT NULL DEFAULT 0,
|
||||
DROP COLUMN "lefty_mode",
|
||||
ADD COLUMN "lefty_mode" INTEGER NOT NULL DEFAULT 0;
|
||||
|
|
@ -376,11 +376,11 @@ model Preferences {
|
|||
user Users @relation("UserPreferences", fields: [user_id], references: [id])
|
||||
user_id String @unique @db.Uuid
|
||||
|
||||
notifications Boolean @default(false)
|
||||
dark_mode Boolean @default(false)
|
||||
lang_switch Boolean @default(false)
|
||||
lefty_mode Boolean @default(false)
|
||||
// TODO: change BOOLEAN to use 0 or 1 in case there is more than 2 options for each preferences
|
||||
notifications Int @default(0)
|
||||
dark_mode Int @default(0)
|
||||
lang_switch Int @default(0)
|
||||
lefty_mode Int @default(0)
|
||||
|
||||
@@map("preferences")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import { NotificationsModule } from './modules/notifications/notifications.modul
|
|||
import { OauthSessionsModule } from './modules/oauth-sessions/oauth-sessions.module';
|
||||
import { OvertimeService } from './modules/business-logics/services/overtime.service';
|
||||
import { PayperiodsModule } from './modules/pay-periods/pay-periods.module';
|
||||
import { PreferencesModule } from './modules/preferences/preferences.module';
|
||||
import { PrismaModule } from './prisma/prisma.module';
|
||||
import { ScheduleModule } from '@nestjs/schedule';
|
||||
import { ShiftsModule } from './modules/shifts/shifts.module';
|
||||
|
|
@ -43,6 +44,7 @@ import { SchedulePresetsModule } from './modules/schedule-presets/schedule-prese
|
|||
NotificationsModule,
|
||||
OauthSessionsModule,
|
||||
PayperiodsModule,
|
||||
PreferencesModule,
|
||||
PrismaModule,
|
||||
ScheduleModule.forRoot(), //cronjobs
|
||||
SchedulePresetsModule,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ import { Module } from '@nestjs/common';
|
|||
import { EmployeesController } from './controllers/employees.controller';
|
||||
import { EmployeesService } from './services/employees.service';
|
||||
import { EmployeesArchivalService } from './services/employees-archival.service';
|
||||
import { SharedModule } from '../shared/shared.module';
|
||||
|
||||
@Module({
|
||||
controllers: [EmployeesController],
|
||||
controllers: [EmployeesController, SharedModule],
|
||||
providers: [EmployeesService, EmployeesArchivalService],
|
||||
exports: [EmployeesService, EmployeesArchivalService],
|
||||
})
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { PrismaService } from "src/prisma/prisma.service";
|
|||
import { UpsertExpenseDto } from "../dtos/upsert-expense.dto";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
import { ExpenseResponse, UpsertAction } from "../types and interfaces/expenses.types.interfaces";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmployeeTimesheetResolver } from "src/modules/shared/utils/resolve-employee-timesheet.utils";
|
||||
import {
|
||||
BadRequestException,
|
||||
|
|
@ -27,7 +27,7 @@ export class ExpensesCommandService extends BaseApprovalService<Expenses> {
|
|||
prisma: PrismaService,
|
||||
private readonly bankCodesResolver: BankCodesResolver,
|
||||
private readonly timesheetsResolver: EmployeeTimesheetResolver,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
) { super(prisma); }
|
||||
|
||||
//_____________________________________________________________________________________________
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@ import { PrismaService } from "src/prisma/prisma.service";
|
|||
import { DayExpensesDto as ExpenseListResponseDto, ExpenseDto } from "src/modules/timesheets/dtos/timesheet-period.dto";
|
||||
import { round2, toUTCDateOnly } from "src/modules/timesheets/utils/timesheet.helpers";
|
||||
import { EXPENSE_TYPES } from "src/modules/timesheets/types/timesheet.types";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
|
||||
@Injectable()
|
||||
export class ExpensesQueryService {
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly employeeRepo: EmployeeIdEmailResolver,
|
||||
private readonly employeeRepo: EmailToIdResolver,
|
||||
) {}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import { Module } from "@nestjs/common";
|
||||
import { CsvExportController } from "./controllers/csv-exports.controller";
|
||||
import { CsvExportService } from "./services/csv-exports.service";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
|
||||
@Module({
|
||||
providers:[CsvExportService],
|
||||
providers:[CsvExportService, SharedModule],
|
||||
controllers: [CsvExportController],
|
||||
})
|
||||
export class CsvExportModule {}
|
||||
|
|
|
|||
|
|
@ -8,9 +8,10 @@ import { SickLeaveRequestsService } from "./services/sick-leave-requests.service
|
|||
import { LeaveRequestsService } from "./services/leave-request.service";
|
||||
import { ShiftsModule } from "../shifts/shifts.module";
|
||||
import { LeaveRequestsUtils } from "./utils/leave-request.util";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
|
||||
@Module({
|
||||
imports: [BusinessLogicsModule, ShiftsModule],
|
||||
imports: [BusinessLogicsModule, ShiftsModule, SharedModule],
|
||||
controllers: [LeaveRequestController],
|
||||
providers: [
|
||||
VacationLeaveRequestsService,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import { leaveRequestsSelect } from '../utils/leave-requests.select';
|
|||
import { LeaveRequestsUtils} from '../utils/leave-request.util';
|
||||
import { normalizeDates, toDateOnly } from 'src/modules/shared/helpers/date-time.helpers';
|
||||
import { BankCodesResolver } from 'src/modules/shared/utils/resolve-bank-type-id.utils';
|
||||
import { EmployeeIdEmailResolver } from 'src/modules/shared/utils/resolve-email-id.utils';
|
||||
import { EmailToIdResolver } from 'src/modules/shared/utils/resolve-email-id.utils';
|
||||
|
||||
|
||||
@Injectable()
|
||||
|
|
@ -18,7 +18,7 @@ export class HolidayLeaveRequestsService {
|
|||
private readonly prisma: PrismaService,
|
||||
private readonly holidayService: HolidayService,
|
||||
private readonly leaveUtils: LeaveRequestsUtils,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly typeResolver: BankCodesResolver,
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import { VacationService } from "src/modules/business-logics/services/vacation.s
|
|||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { LeaveRequestsUtils } from "../utils/leave-request.util";
|
||||
import { normalizeDates, toDateOnly, toISODateKey } from "src/modules/shared/helpers/date-time.helpers";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
|
||||
@Injectable()
|
||||
|
|
@ -28,7 +28,7 @@ export class LeaveRequestsService {
|
|||
private readonly vacationLeaveService: VacationLeaveRequestsService,
|
||||
private readonly vacationLogic: VacationService,
|
||||
private readonly leaveUtils: LeaveRequestsUtils,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly typeResolver: BankCodesResolver,
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import { SickLeaveService } from "src/modules/business-logics/services/sick-le
|
|||
import { roundToQuarterHour } from "src/common/utils/date-utils";
|
||||
import { LeaveRequestsUtils } from "../utils/leave-request.util";
|
||||
import { normalizeDates, toDateOnly } from "src/modules/shared/helpers/date-time.helpers";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
|
||||
@Injectable()
|
||||
|
|
@ -18,7 +18,7 @@ export class SickLeaveRequestsService {
|
|||
private readonly prisma: PrismaService,
|
||||
private readonly sickService: SickLeaveService,
|
||||
private readonly leaveUtils: LeaveRequestsUtils,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly typeResolver: BankCodesResolver,
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import { leaveRequestsSelect } from "../utils/leave-requests.select";
|
|||
import { roundToQuarterHour } from "src/common/utils/date-utils";
|
||||
import { LeaveRequestsUtils } from "../utils/leave-request.util";
|
||||
import { normalizeDates, toDateOnly } from "src/modules/shared/helpers/date-time.helpers";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
|
||||
@Injectable()
|
||||
|
|
@ -19,7 +19,7 @@ export class VacationLeaveRequestsService {
|
|||
private readonly prisma: PrismaService,
|
||||
private readonly vacationService: VacationService,
|
||||
private readonly leaveUtils: LeaveRequestsUtils,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly typeResolver: BankCodesResolver,
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { BadRequestException, Injectable, NotFoundException } from "@nestjs/common";
|
||||
import { LeaveTypes } from "@prisma/client";
|
||||
import { hhmmFromLocal, toDateOnly, toStringFromDate } from "src/modules/shared/helpers/date-time.helpers";
|
||||
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||
import { ShiftsCommandService } from "src/modules/shifts/services/shifts-command.service";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { LeaveTypes } from "@prisma/client";
|
||||
|
||||
@Injectable()
|
||||
export class LeaveRequestsUtils {
|
||||
|
|
|
|||
|
|
@ -8,23 +8,18 @@ import { TimesheetsCommandService } from "../timesheets/services/timesheets-comm
|
|||
import { ExpensesCommandService } from "../expenses/services/expenses-command.service";
|
||||
import { ShiftsCommandService } from "../shifts/services/shifts-command.service";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
import { EmployeeIdEmailResolver } from "../shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "../shared/utils/resolve-bank-type-id.utils";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { OvertimeService } from "../business-logics/services/overtime.service";
|
||||
import { BusinessLogicsModule } from "../business-logics/business-logics.module";
|
||||
|
||||
@Module({
|
||||
imports: [PrismaModule, TimesheetsModule, SharedModule],
|
||||
imports: [PrismaModule, TimesheetsModule, SharedModule, BusinessLogicsModule],
|
||||
providers: [
|
||||
PayPeriodsQueryService,
|
||||
PayPeriodsCommandService,
|
||||
TimesheetsCommandService,
|
||||
ExpensesCommandService,
|
||||
ShiftsCommandService,
|
||||
EmployeeIdEmailResolver,
|
||||
BankCodesResolver,
|
||||
PrismaService,
|
||||
OvertimeService,
|
||||
],
|
||||
controllers: [PayPeriodsController],
|
||||
exports: [
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
import { IsBoolean, IsEmail, IsString } from "class-validator";
|
||||
import { IsInt } from "class-validator";
|
||||
|
||||
export class PreferencesDto {
|
||||
|
||||
@IsBoolean()
|
||||
notifications: boolean;
|
||||
@IsInt()
|
||||
notifications: number;
|
||||
|
||||
@IsBoolean()
|
||||
dark_mode: boolean;
|
||||
@IsInt()
|
||||
dark_mode: number;
|
||||
|
||||
@IsBoolean()
|
||||
lang_switch: boolean;
|
||||
@IsInt()
|
||||
lang_switch: number;
|
||||
|
||||
@IsBoolean()
|
||||
lefty_mode: boolean;
|
||||
@IsInt()
|
||||
lefty_mode: number;
|
||||
}
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
import { Module } from "@nestjs/common";
|
||||
import { PreferencesController } from "./controllers/preferences.controller";
|
||||
import { PreferencesService } from "./services/preferences.service";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
|
||||
@Module({
|
||||
controllers: [ PreferencesController ],
|
||||
providers: [ PreferencesService ],
|
||||
exports: [ PreferencesService ],
|
||||
imports: [SharedModule],
|
||||
controllers: [ PreferencesController ],
|
||||
providers: [ PreferencesService ],
|
||||
exports: [ PreferencesService ],
|
||||
})
|
||||
|
||||
export class PreferencesModule {}
|
||||
|
|
@ -2,22 +2,17 @@ import { Injectable, NotFoundException } from "@nestjs/common";
|
|||
import { Preferences } from "@prisma/client";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { PreferencesDto } from "../dtos/preferences.dto";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
|
||||
@Injectable()
|
||||
export class PreferencesService {
|
||||
constructor(private readonly prisma: PrismaService){}
|
||||
|
||||
async resolveUserIdWithEmail(email: string): Promise<string> {
|
||||
const user = await this.prisma.users.findFirst({
|
||||
where: { email },
|
||||
select: { id: true },
|
||||
});
|
||||
if(!user) throw new NotFoundException(`User with email ${ email } not found`);
|
||||
return user.id;
|
||||
}
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly emailResolver: EmailToIdResolver ,
|
||||
){}
|
||||
|
||||
async updatePreferences(email: string, dto: PreferencesDto ): Promise<Preferences> {
|
||||
const user_id = await this.resolveUserIdWithEmail(email);
|
||||
const user_id = await this.emailResolver.resolveUserIdWithEmail(email);
|
||||
return this.prisma.preferences.update({
|
||||
where: { user_id },
|
||||
data: {
|
||||
|
|
|
|||
|
|
@ -2,21 +2,18 @@ import { Module } from "@nestjs/common";
|
|||
import { SchedulePresetsCommandService } from "./services/schedule-presets-command.service";
|
||||
import { SchedulePresetsQueryService } from "./services/schedule-presets-query.service";
|
||||
import { SchedulePresetsController } from "./controller/schedule-presets.controller";
|
||||
import { EmployeeIdEmailResolver } from "../shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "../shared/utils/resolve-bank-type-id.utils";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { SchedulePresetsApplyService } from "./services/schedule-presets-apply.service";
|
||||
import { SharedModule } from "../shared/shared.module";
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
imports: [SharedModule],
|
||||
controllers: [SchedulePresetsController],
|
||||
providers: [
|
||||
PrismaService,
|
||||
SchedulePresetsCommandService,
|
||||
SchedulePresetsQueryService,
|
||||
SchedulePresetsApplyService,
|
||||
EmployeeIdEmailResolver,
|
||||
BankCodesResolver,
|
||||
],
|
||||
exports:[
|
||||
SchedulePresetsCommandService,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { BadRequestException, ConflictException, Injectable, NotFoundException } from "@nestjs/common";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { ApplyResult } from "../types/schedule-presets.types";
|
||||
import { Prisma, Weekday } from "@prisma/client";
|
||||
|
|
@ -9,7 +9,7 @@ import { WEEKDAY } from "../mappers/schedule-presets.mappers";
|
|||
export class SchedulePresetsApplyService {
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
) {}
|
||||
|
||||
async applyToTimesheet(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { BadRequestException, ConflictException, Injectable, NotFoundException } from "@nestjs/common";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { UpsertAction } from "src/modules/shared/types/upsert-actions.types";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { SchedulePresetsDto } from "../dtos/create-schedule-presets.dto";
|
||||
|
|
@ -10,7 +10,7 @@ import { Prisma, Weekday } from "@prisma/client";
|
|||
export class SchedulePresetsCommandService {
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly typeResolver : BankCodesResolver,
|
||||
){}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable, NotFoundException } from "@nestjs/common";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { PresetResponse, ShiftResponse } from "../types/schedule-presets.types";
|
||||
import { Prisma } from "@prisma/client";
|
||||
|
|
@ -8,7 +8,7 @@ import { Prisma } from "@prisma/client";
|
|||
export class SchedulePresetsQueryService {
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
){}
|
||||
|
||||
async findSchedulePresetsByEmail(email:string): Promise<PresetResponse[]> {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Module } from "@nestjs/common";
|
||||
import { EmployeeIdEmailResolver } from "./utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "./utils/resolve-email-id.utils";
|
||||
import { EmployeeTimesheetResolver } from "./utils/resolve-employee-timesheet.utils";
|
||||
import { FullNameResolver } from "./utils/resolve-full-name.utils";
|
||||
import { BankCodesResolver } from "./utils/resolve-bank-type-id.utils";
|
||||
|
|
@ -9,13 +9,13 @@ import { PrismaModule } from "src/prisma/prisma.module";
|
|||
imports: [PrismaModule],
|
||||
providers: [
|
||||
FullNameResolver,
|
||||
EmployeeIdEmailResolver,
|
||||
EmailToIdResolver,
|
||||
BankCodesResolver,
|
||||
EmployeeTimesheetResolver,
|
||||
],
|
||||
exports: [
|
||||
FullNameResolver,
|
||||
EmployeeIdEmailResolver,
|
||||
EmailToIdResolver,
|
||||
BankCodesResolver,
|
||||
EmployeeTimesheetResolver,
|
||||
],
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { PrismaService } from "src/prisma/prisma.service";
|
|||
type Tx = Prisma.TransactionClient | PrismaClient;
|
||||
|
||||
@Injectable()
|
||||
export class EmployeeIdEmailResolver {
|
||||
export class EmailToIdResolver {
|
||||
|
||||
constructor(private readonly prisma: PrismaService) {}
|
||||
|
||||
|
|
@ -20,4 +20,16 @@ export class EmployeeIdEmailResolver {
|
|||
if(!employee)throw new NotFoundException(`Employee with email: ${email} not found`);
|
||||
return employee.id;
|
||||
}
|
||||
|
||||
// find user_id using email
|
||||
readonly resolveUserIdWithEmail = async (email: string, client?: Tx
|
||||
): Promise<string> => {
|
||||
const db = client ?? this.prisma;
|
||||
const user = await db.users.findFirst({
|
||||
where: { email },
|
||||
select: { id: true },
|
||||
});
|
||||
if(!user) throw new NotFoundException(`User with email ${ email } not found`);
|
||||
return user.id;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import { BadRequestException, ConflictException, Injectable, Logger, NotFoundException, UnprocessableEntityException } from "@nestjs/common";
|
||||
import { normalizeShiftPayload, overlaps } from "../utils/shifts.utils";
|
||||
import { DayShiftResponse, UpsertAction } from "../types-and-interfaces/shifts-upsert.types";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
import { Prisma, Shifts } from "@prisma/client";
|
||||
import { UpsertShiftDto } from "../dtos/upsert-shift.dto";
|
||||
|
|
@ -16,7 +16,7 @@ export class ShiftsCommandService extends BaseApprovalService<Shifts> {
|
|||
|
||||
constructor(
|
||||
prisma: PrismaService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly bankTypeResolver: BankCodesResolver,
|
||||
private readonly overtimeService: OvertimeService,
|
||||
) { super(prisma); }
|
||||
|
|
|
|||
|
|
@ -5,24 +5,24 @@ import { ShiftsCommandService } from './services/shifts-command.service';
|
|||
import { NotificationsModule } from '../notifications/notifications.module';
|
||||
import { ShiftsQueryService } from './services/shifts-query.service';
|
||||
import { ShiftsArchivalService } from './services/shifts-archival.service';
|
||||
import { BankCodesResolver } from '../shared/utils/resolve-bank-type-id.utils';
|
||||
import { EmployeeIdEmailResolver } from '../shared/utils/resolve-email-id.utils';
|
||||
import { SharedModule } from '../shared/shared.module';
|
||||
|
||||
@Module({
|
||||
imports: [BusinessLogicsModule, NotificationsModule],
|
||||
controllers: [ShiftsController],
|
||||
providers: [
|
||||
ShiftsQueryService,
|
||||
ShiftsCommandService,
|
||||
ShiftsArchivalService,
|
||||
BankCodesResolver,
|
||||
EmployeeIdEmailResolver],
|
||||
exports: [
|
||||
ShiftsQueryService,
|
||||
ShiftsCommandService,
|
||||
ShiftsArchivalService,
|
||||
BankCodesResolver,
|
||||
EmployeeIdEmailResolver
|
||||
],
|
||||
imports: [
|
||||
BusinessLogicsModule,
|
||||
NotificationsModule,
|
||||
SharedModule
|
||||
],
|
||||
controllers: [ShiftsController],
|
||||
providers: [
|
||||
ShiftsQueryService,
|
||||
ShiftsCommandService,
|
||||
ShiftsArchivalService,
|
||||
],
|
||||
exports: [
|
||||
ShiftsQueryService,
|
||||
ShiftsCommandService,
|
||||
ShiftsArchivalService,
|
||||
],
|
||||
})
|
||||
export class ShiftsModule {}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { CreateTimesheetDto } from "../dtos/create-timesheet.dto";
|
|||
import { getWeekEnd, getWeekStart } from "src/common/utils/date-utils";
|
||||
import { parseISODate, parseHHmm } from "../utils/timesheet.helpers";
|
||||
import { TimesheetDto } from "../dtos/timesheet-period.dto";
|
||||
import { EmployeeIdEmailResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmailToIdResolver } from "src/modules/shared/utils/resolve-email-id.utils";
|
||||
import { EmployeeTimesheetResolver } from "src/modules/shared/utils/resolve-employee-timesheet.utils";
|
||||
import { BankCodesResolver } from "src/modules/shared/utils/resolve-bank-type-id.utils";
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ export class TimesheetsCommandService extends BaseApprovalService<Timesheets>{
|
|||
constructor(
|
||||
prisma: PrismaService,
|
||||
private readonly query: TimesheetsQueryService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly timesheetResolver: EmployeeTimesheetResolver,
|
||||
private readonly bankTypeResolver: BankCodesResolver,
|
||||
) {super(prisma);}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { PrismaService } from 'src/prisma/prisma.service';
|
|||
import { TimesheetDto, TimesheetPeriodDto } from '../dtos/timesheet-period.dto';
|
||||
import { ShiftRow, ExpenseRow } from '../types/timesheet.types';
|
||||
import { buildPeriod } from '../utils/timesheet.utils';
|
||||
import { EmployeeIdEmailResolver } from 'src/modules/shared/utils/resolve-email-id.utils';
|
||||
import { EmailToIdResolver } from 'src/modules/shared/utils/resolve-email-id.utils';
|
||||
import { FullNameResolver } from 'src/modules/shared/utils/resolve-full-name.utils';
|
||||
|
||||
|
||||
|
|
@ -13,7 +13,7 @@ import { FullNameResolver } from 'src/modules/shared/utils/resolve-full-name.uti
|
|||
export class TimesheetsQueryService {
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly emailResolver: EmployeeIdEmailResolver,
|
||||
private readonly emailResolver: EmailToIdResolver,
|
||||
private readonly fullNameResolver: FullNameResolver
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,20 +9,22 @@ import { SharedModule } from '../shared/shared.module';
|
|||
import { Module } from '@nestjs/common';
|
||||
|
||||
@Module({
|
||||
imports: [BusinessLogicsModule, SharedModule],
|
||||
controllers: [TimesheetsController],
|
||||
providers: [
|
||||
TimesheetsQueryService,
|
||||
TimesheetsCommandService,
|
||||
ShiftsCommandService,
|
||||
ExpensesCommandService,
|
||||
TimesheetArchiveService,
|
||||
|
||||
],
|
||||
exports: [
|
||||
TimesheetsQueryService,
|
||||
TimesheetArchiveService,
|
||||
TimesheetsCommandService
|
||||
],
|
||||
imports: [
|
||||
BusinessLogicsModule,
|
||||
SharedModule
|
||||
],
|
||||
controllers: [TimesheetsController],
|
||||
providers: [
|
||||
TimesheetsQueryService,
|
||||
TimesheetsCommandService,
|
||||
ShiftsCommandService,
|
||||
ExpensesCommandService,
|
||||
TimesheetArchiveService,
|
||||
],
|
||||
exports: [
|
||||
TimesheetsQueryService,
|
||||
TimesheetArchiveService,
|
||||
TimesheetsCommandService
|
||||
],
|
||||
})
|
||||
export class TimesheetsModule {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user