import { Body, Controller, Delete, Get, Param, Post, Query, Req } from '@nestjs/common'; import { Request } from 'express'; import { ChatService } from './chat.service'; import { CreateAiResponseDto } from './dto/create-ai-response.dto'; import { CreateChatMessageDto } from './dto/create-chat-message.dto'; import { CreateInstructorChatMessageDto } from './dto/create-instructor-chat-message.dto'; import { ListChatThreadsDto } from './dto/list-chat-threads.dto'; @Controller('chat') export class ChatController { constructor(private readonly chatService: ChatService) {} @Get('threads') listThreads(@Req() request: Request, @Query() query: ListChatThreadsDto) { return this.chatService.listThreads(this.getBearerToken(request), query); } @Delete('threads') clearThreads(@Req() request: Request, @Query() query: ListChatThreadsDto) { return this.chatService.clearStudentThreads(this.getBearerToken(request), query); } @Post('messages') createMessage( @Req() request: Request, @Body() createChatMessageDto: CreateChatMessageDto, ) { return this.chatService.createStudentMessage( this.getBearerToken(request), createChatMessageDto, ); } @Post('ai/respond') createAiResponse( @Req() request: Request, @Body() createAiResponseDto: CreateAiResponseDto, ) { return this.chatService.createAiResponse( this.getBearerToken(request), createAiResponseDto, ); } @Post('ai/messages/:messageId/cancel') cancelAiMessage( @Req() request: Request, @Param('messageId') messageId: string, @Body() body: { content?: string }, ) { return this.chatService.cancelAiMessage( this.getBearerToken(request), messageId, body.content, ); } @Post('ai/cancel-active') cancelActiveAiResponse( @Req() request: Request, @Body() body: { week?: number }, ) { return this.chatService.cancelActiveAiResponse( this.getBearerToken(request), body.week, ); } @Get('instructor/threads') listInstructorThreads( @Req() request: Request, @Query() query: ListChatThreadsDto, ) { return this.chatService.listInstructorThreads( this.getBearerToken(request), query, ); } @Get('instructor/threads/:threadId') getInstructorThread( @Req() request: Request, @Param('threadId') threadId: string, ) { return this.chatService.getInstructorThread( this.getBearerToken(request), threadId, ); } @Post('instructor/threads/:threadId/messages') createInstructorMessage( @Req() request: Request, @Param('threadId') threadId: string, @Body() createInstructorChatMessageDto: CreateInstructorChatMessageDto, ) { return this.chatService.createInstructorMessage( this.getBearerToken(request), threadId, createInstructorChatMessageDto, ); } private getBearerToken(request: Request): string | undefined { const [type, token] = request.headers.authorization?.split(' ') ?? []; return type === 'Bearer' ? token : undefined; } }