1- import { Body , Controller , Get , Post , Req , UseGuards , UseInterceptors } from '@nestjs/common' ;
1+ import { Body , Controller , Get , HttpCode , Param , Post , Req , UseGuards , UseInterceptors } from '@nestjs/common' ;
22import { ApiBody , ApiTags } from '@nestjs/swagger' ;
33
44import { CreateSessionDto } from './dto/create-session.dto' ;
5+ import { TerminateSessionDto } from './dto/terminate-session.dto' ;
56import { SessionsService } from './sessions.service' ;
67import { CreateSessionSwagger } from './swagger/create-session.swagger' ;
78import { GetSessionSwagger } from './swagger/get-session.swagger' ;
9+ import { TerminateSessionSwagger } from './swagger/terminate-session.swagger' ;
810
911import { JwtAuthGuard } from '@auth/jwt-auth.guard' ;
12+ import { SessionTokenValidationGuard } from '@common/guards/session-token-validation.guard' ;
1013import { TransformInterceptor } from '@common/interceptors/transform.interceptor' ;
14+ import { SocketGateway } from '@socket/socket.gateway' ;
1115
1216@ApiTags ( 'Sessions' )
1317@UseInterceptors ( TransformInterceptor )
14- @UseGuards ( JwtAuthGuard )
1518@Controller ( 'sessions' )
1619export class SessionsController {
17- constructor ( private readonly sessionsService : SessionsService ) { }
20+ constructor (
21+ private readonly sessionsService : SessionsService ,
22+ private readonly socketGateway : SocketGateway ,
23+ ) { }
1824
1925 @Post ( )
26+ @UseGuards ( JwtAuthGuard )
2027 @CreateSessionSwagger ( )
2128 @ApiBody ( { type : CreateSessionDto } )
2229 async create ( @Body ( ) createSessionDto : CreateSessionDto , @Req ( ) request : Request ) {
@@ -26,10 +33,21 @@ export class SessionsController {
2633 }
2734
2835 @Get ( )
36+ @UseGuards ( JwtAuthGuard )
2937 @GetSessionSwagger ( )
3038 async getSessionsById ( @Req ( ) request : Request ) {
3139 const userId = request [ 'user' ] . userId ;
3240 const sessionData = await this . sessionsService . getSessionsById ( userId ) ;
3341 return { sessionData } ;
3442 }
43+
44+ @Post ( ':sessionId/terminate' )
45+ @HttpCode ( 200 )
46+ @TerminateSessionSwagger ( )
47+ @UseGuards ( SessionTokenValidationGuard )
48+ async terminateSession ( @Param ( 'sessionId' ) sessionId : string , @Body ( ) { token } : TerminateSessionDto ) {
49+ const result = await this . sessionsService . terminateSession ( sessionId , token ) ;
50+ this . socketGateway . broadcastSessionEnd ( sessionId , token , result ) ;
51+ return result ;
52+ }
3553}
0 commit comments