diff --git a/.github/workflows/continous_integration.yml b/.github/workflows/continous_integration.yml index 75ef77bd..406cedf6 100644 --- a/.github/workflows/continous_integration.yml +++ b/.github/workflows/continous_integration.yml @@ -78,6 +78,7 @@ jobs: TEST_USER_LASTNAME: 'Doe' ETHEREAL_USER: ${{ secrets.ETHEREAL_USER }} ETHEREAL_PASSWORD: ${{ secrets.ETHEREAL_PASSWORD }} + DEVICE_TICKET: 'ticket' services: postgres: diff --git a/packages/api/src/modules/ticket/ticket.controller.ts b/packages/api/src/modules/ticket/ticket.controller.ts new file mode 100644 index 00000000..6fdf6a3c --- /dev/null +++ b/packages/api/src/modules/ticket/ticket.controller.ts @@ -0,0 +1,17 @@ +import { Controller, Get } from '@nestjs/common'; + +import { BasePayload } from '../../interfaces/token-types'; +import { Auth } from '../auth/decorators/auth.decorator'; +import { CookiePayload } from '../auth/decorators/cookiePayload.decorator'; +import { TicketService } from './ticket.service'; + +@Auth() +@Controller('ticket') +export class TicketController { + constructor(private readonly ticketService: TicketService) {} + + @Get('generate') + async generate(@CookiePayload() payload: BasePayload) { + return this.ticketService.generate(payload.sub); + } +} diff --git a/packages/api/src/modules/ticket/ticket.module.ts b/packages/api/src/modules/ticket/ticket.module.ts new file mode 100644 index 00000000..407f1b61 --- /dev/null +++ b/packages/api/src/modules/ticket/ticket.module.ts @@ -0,0 +1,15 @@ +import { CacheModule, Module } from '@nestjs/common'; + +import { AuthModule } from '../auth/auth.module'; +import { TokenModule } from '../auth/token/token.module'; +import { RepositoryModule } from '../repository/repository.module'; +import { TicketController } from './ticket.controller'; +import { TicketService } from './ticket.service'; + +@Module({ + imports: [RepositoryModule, AuthModule, TokenModule, CacheModule.register()], + controllers: [TicketController], + providers: [TicketService], + exports: [TicketService], +}) +export class TicketModule {} diff --git a/packages/api/src/modules/ticket/ticket.service.ts b/packages/api/src/modules/ticket/ticket.service.ts new file mode 100644 index 00000000..0797f474 --- /dev/null +++ b/packages/api/src/modules/ticket/ticket.service.ts @@ -0,0 +1,18 @@ +import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common'; +import { Cache } from 'cache-manager'; +import { v4 as uuidV4 } from 'uuid'; + +@Injectable() +export class TicketService { + constructor(@Inject(CACHE_MANAGER) private readonly cacheManager: Cache) {} + + async generate(userId: string): Promise { + const ticket = uuidV4(); + await this.cacheManager.set(ticket, userId, { ttl: 60 }); + return ticket; + } + + async check(ticket: string): Promise { + return this.cacheManager.get(ticket); + } +}