Sync LMS backend source

This commit is contained in:
2026-07-07 16:09:12 +09:00
commit 5a2ecd0fea
126 changed files with 22959 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
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;
}
}