From e53f6466592743da87076713f6cc2002c2ac3569 Mon Sep 17 00:00:00 2001 From: Matthieu Haineault Date: Thu, 17 Jul 2025 16:47:02 -0400 Subject: [PATCH] feat(module): oauth-access-tokens module et update app.module --- src/app.module.ts | 20 ++++- .../oauth-access-tokens.controller.ts | 35 ++++++++ .../dtos/create-oauth-access-token.dto.ts | 31 +++++++ .../dtos/update-oauth-access-token.dto.ts | 4 + .../oauth-access-tokens.module.ts | 10 +++ .../services/oauth-access-tokens.service.ts | 84 +++++++++++++++++++ 6 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 src/modules/oauth-access-tokens/controllers/oauth-access-tokens.controller.ts create mode 100644 src/modules/oauth-access-tokens/dtos/create-oauth-access-token.dto.ts create mode 100644 src/modules/oauth-access-tokens/dtos/update-oauth-access-token.dto.ts create mode 100644 src/modules/oauth-access-tokens/oauth-access-tokens.module.ts create mode 100644 src/modules/oauth-access-tokens/services/oauth-access-tokens.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index d219af7..d4cc1f1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -5,9 +5,27 @@ import { PrismaModule } from './prisma/prisma.module'; import { HealthModule } from './health/health.module'; import { HealthController } from './health/health.controller'; import { UsersModule } from './modules/users-management/users.module'; +import { OauthAccessTokensModule } from './modules/oauth-access-tokens/oauth-access-tokens.module'; +import { CustomersModule } from './modules/customers/customers.module'; +import { EmployeesModule } from './modules/employees/employees.module'; +import { LeaveRequestsModule } from './modules/leave_requests/leave-requests.module'; +import { ShiftCodeModule } from './modules/shift-codes/shift-codes.module'; +import { ShiftsModule } from './modules/shifts/shifts.module'; +import { TimesheetsModule } from './modules/timesheets/timesheets.module'; @Module({ - imports: [PrismaModule, HealthModule, UsersModule], + imports: [ + PrismaModule, + HealthModule, + UsersModule, + OauthAccessTokensModule, + CustomersModule, + EmployeesModule, + LeaveRequestsModule, + ShiftCodeModule, + ShiftsModule, + TimesheetsModule, + ], controllers: [AppController, HealthController], providers: [AppService], }) diff --git a/src/modules/oauth-access-tokens/controllers/oauth-access-tokens.controller.ts b/src/modules/oauth-access-tokens/controllers/oauth-access-tokens.controller.ts new file mode 100644 index 0000000..29d8214 --- /dev/null +++ b/src/modules/oauth-access-tokens/controllers/oauth-access-tokens.controller.ts @@ -0,0 +1,35 @@ +import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common'; +import { OauthAccessTokensService } from '../services/oauth-access-tokens.service'; +import { CreateOauthAccessTokenDto } from '../dtos/create-oauth-access-token.dto'; +import { OAuthAccessTokens } from '@prisma/client'; +import { UpdateOauthAccessTokenDto } from '../dtos/update-oauth-access-token.dto'; + +@Controller('oauth-access-tokens') +export class OauthAccessTokensController { + constructor(private readonly oauthAccessTokensService: OauthAccessTokensService){} + + @Post() + create(@Body()dto: CreateOauthAccessTokenDto): Promise { + return this.oauthAccessTokensService.create(dto); + } + + @Get() + findAll(): Promise { + return this.oauthAccessTokensService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string): Promise { + return this.oauthAccessTokensService.findOne(id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() dto: UpdateOauthAccessTokenDto): Promise { + return this.oauthAccessTokensService.update(id,dto); + } + + @Delete(':id') + remove(@Param('id') id: string): Promise { + return this.oauthAccessTokensService.remove(id); + } +} diff --git a/src/modules/oauth-access-tokens/dtos/create-oauth-access-token.dto.ts b/src/modules/oauth-access-tokens/dtos/create-oauth-access-token.dto.ts new file mode 100644 index 0000000..03db393 --- /dev/null +++ b/src/modules/oauth-access-tokens/dtos/create-oauth-access-token.dto.ts @@ -0,0 +1,31 @@ +import { Type } from "class-transformer"; +import { IsArray, IsDate, IsOptional, IsString, IsUUID } from "class-validator"; + +export class CreateOauthAccessTokenDto { + + @IsUUID() + user_id: string; + + @IsString() + application: string; + + @IsString() + access_token: string; + + @IsString() + refresh_token: string; + + @Type(()=> Date) + @IsDate() + access_token_expiry: Date; + + @Type(()=> Date) + @IsDate() + @IsOptional() + refresh_token_expiry?: Date; + + @IsArray() + @IsString() + @IsOptional() + scopes?: string[]; +} diff --git a/src/modules/oauth-access-tokens/dtos/update-oauth-access-token.dto.ts b/src/modules/oauth-access-tokens/dtos/update-oauth-access-token.dto.ts new file mode 100644 index 0000000..055c338 --- /dev/null +++ b/src/modules/oauth-access-tokens/dtos/update-oauth-access-token.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from "@nestjs/swagger"; +import { CreateOauthAccessTokenDto } from "./create-oauth-access-token.dto"; + +export class UpdateOauthAccessTokenDto extends PartialType(CreateOauthAccessTokenDto) {} diff --git a/src/modules/oauth-access-tokens/oauth-access-tokens.module.ts b/src/modules/oauth-access-tokens/oauth-access-tokens.module.ts new file mode 100644 index 0000000..ca33da5 --- /dev/null +++ b/src/modules/oauth-access-tokens/oauth-access-tokens.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { OauthAccessTokensController } from './controllers/oauth-access-tokens.controller'; +import { OauthAccessTokensService } from './services/oauth-access-tokens.service'; +import { PrismaService } from 'src/prisma/prisma.service'; + +@Module({ + controllers: [OauthAccessTokensController], + providers: [OauthAccessTokensService, PrismaService] +}) +export class OauthAccessTokensModule {} diff --git a/src/modules/oauth-access-tokens/services/oauth-access-tokens.service.ts b/src/modules/oauth-access-tokens/services/oauth-access-tokens.service.ts new file mode 100644 index 0000000..7a7a6a5 --- /dev/null +++ b/src/modules/oauth-access-tokens/services/oauth-access-tokens.service.ts @@ -0,0 +1,84 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { CreateOauthAccessTokenDto } from '../dtos/create-oauth-access-token.dto'; +import { OAuthAccessTokens } from '@prisma/client'; +import { UpdateOauthAccessTokenDto } from '../dtos/update-oauth-access-token.dto'; + +@Injectable() +export class OauthAccessTokensService { + constructor(private readonly prisma: PrismaService) {} + + async create(dto: CreateOauthAccessTokenDto): Promise { + const { + user_id, + application, + access_token, + refresh_token, + access_token_expiry, + refresh_token_expiry, + scopes, + } = dto; + + return this.prisma.oAuthAccessTokens.create({ + data: { + user_id, + application, + access_token, + refresh_token, + access_token_expiry, + refresh_token_expiry, + scopes, + }, + include: { user: true }, + }); + } + + findAll(): Promise { + return this.prisma.oAuthAccessTokens.findMany({ + include: { user: true }, + }); + } + + async findOne(id: string): Promise { + const token = await this.prisma.oAuthAccessTokens.findUnique({ + where: { id }, + include: { user: true }, + }); + if(!token) { + throw new NotFoundException(`token #${ id } not found`); + } + return token; + } + + async update(id: string, dto: UpdateOauthAccessTokenDto): Promise { + await this.findOne(id); + const { + user_id, + application, + access_token, + refresh_token, + access_token_expiry, + refresh_token_expiry, + scopes, + } = dto; + + return this.prisma.oAuthAccessTokens.update({ + where: { id }, + data: { + ...(user_id !== undefined && { user_id }), + ...(application !== undefined && { application }), + ...(access_token !== undefined && { access_token }), + ...(refresh_token !== undefined && { refresh_token }), + ...(access_token_expiry !== undefined && { access_token_expiry }), + ...(refresh_token_expiry !== undefined && { refresh_token_expiry }), + ...(scopes !== undefined && { scopes }), + }, + include: { user: true }, + }); + } + + async remove(id: string): Promise { + await this.findOne(id); + return this.prisma.oAuthAccessTokens.delete({ where: { id }}); + } +}