110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
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;
|
|
}
|
|
}
|