diff --git a/@applications/api/src/modules/session/session.controller.ts b/@applications/api/src/modules/session/session.controller.ts index 1733a47..14909a4 100644 --- a/@applications/api/src/modules/session/session.controller.ts +++ b/@applications/api/src/modules/session/session.controller.ts @@ -6,6 +6,7 @@ import { HttpCode, HttpStatus, Param, + Patch, Post, Query, } from '@nestjs/common'; @@ -15,6 +16,7 @@ import { CreateSessionResponseDto, SessionListItemDto, SessionMessageDto, + UpdateSessionTitleDto, } from './dto/session.dto'; @Controller('session') @@ -44,6 +46,16 @@ export class SessionController { return { session_id: session.id }; } + @Patch(':id/title') + @HttpCode(HttpStatus.NO_CONTENT) + async updateTitle( + @Param('id') sessionId: string, + @Body() dto: UpdateSessionTitleDto, + ): Promise { + await this.sessionService.getSession(sessionId); // validate exists + await this.sessionService.updateTitle(sessionId, dto.title, true); + } + @Get(':id/history') async getHistory(@Param('id') sessionId: string): Promise { return this.sessionService.getHistory(sessionId); diff --git a/@applications/api/src/modules/session/session.service.ts b/@applications/api/src/modules/session/session.service.ts index a0ffe2b..a364073 100644 --- a/@applications/api/src/modules/session/session.service.ts +++ b/@applications/api/src/modules/session/session.service.ts @@ -93,6 +93,17 @@ export class SessionService { return this.messageRepo.save(message); } + async getMessageCount(sessionId: string): Promise { + return this.messageRepo.count({ where: { sessionId } }); + } + + async updateTitle(sessionId: string, title: string, isManual: boolean): Promise { + await this.sessionRepo.update(sessionId, { + title, + titleIsManual: isManual, + }); + } + async listSessions(options: { userId?: string | null; limit?: number; @@ -149,6 +160,8 @@ export class SessionService { last_activity_at: s.lastActivityAt.toISOString(), message_count: countMap.get(s.id) ?? 0, preview: previewMap.get(s.id) ?? null, + title: s.title, + title_is_manual: s.titleIsManual, })); } }