@@ -2,6 +2,9 @@ import { Injectable } from '@nestjs/common';
22
33import { ChatsRepository } from './chats.repository' ;
44
5+ import { DatabaseException } from '@common/exceptions/resource.exception' ;
6+ import { PrismaService } from '@prisma-alias/prisma.service' ;
7+
58export interface ChatSaveDto {
69 sessionId : string ;
710 token : string ;
@@ -10,11 +13,48 @@ export interface ChatSaveDto {
1013
1114@Injectable ( )
1215export class ChatsService {
13- constructor ( private readonly chatsRepository : ChatsRepository ) { }
16+ constructor (
17+ private readonly chatsRepository : ChatsRepository ,
18+ private readonly prisma : PrismaService ,
19+ ) { }
1420
1521 async saveChat ( data : ChatSaveDto ) {
1622 const chat = await this . chatsRepository . save ( data ) ;
1723 const { chattingId, createUserTokenEntity, body : content } = chat ;
1824 return { chattingId, nickname : createUserTokenEntity ?. user ?. nickname || '익명' , content } ;
1925 }
26+
27+ async getChatsForInfiniteScroll ( sessionId : string , count : number , chatId ?: number ) {
28+ try {
29+ const chats = await this . prisma . chatting . findMany ( {
30+ where : {
31+ sessionId,
32+ ...( chatId && { chattingId : { lt : chatId } } ) ,
33+ } ,
34+ include : {
35+ createUserTokenEntity : {
36+ include : {
37+ user : true ,
38+ } ,
39+ } ,
40+ } ,
41+ orderBy : {
42+ chattingId : 'desc' ,
43+ } ,
44+ take : count ,
45+ } ) ;
46+ return chats . map ( ( x ) => {
47+ const { createUserTokenEntity, chattingId, body : content } = x ;
48+ const { user } = createUserTokenEntity ;
49+ const nickname = user ?. nickname || '익명' ;
50+ return {
51+ chattingId,
52+ nickname,
53+ content,
54+ } ;
55+ } ) ;
56+ } catch ( error ) {
57+ throw DatabaseException . read ( 'chatting' ) ;
58+ }
59+ }
2060}
0 commit comments