1+ import { Request , Response } from "express" ;
2+ import { chatService } from "../services/chat.service" ;
3+ import {
4+ CreateChatRoomRequestDto ,
5+ GetChatRoomListRequestDto ,
6+ ChatFilterType
7+ } from "../dtos/chat.dto" ;
8+
9+ export const createOrGetChatRoom = async ( req : Request , res : Response ) : Promise < void > => {
10+ if ( ! req . user ) {
11+ res . fail ( {
12+ statusCode : 401 ,
13+ error : "no user" ,
14+ message : "로그인이 필요합니다." ,
15+ } ) ;
16+ return ;
17+ }
18+
19+ try {
20+ const userId = ( req . user as { user_id : number } ) . user_id ;
21+ const { partner_id } = req . body as CreateChatRoomRequestDto ;
22+
23+ const result = await chatService . createOrGetChatRoomService ( userId , partner_id ) ;
24+
25+ res . success ( result , "채팅방을 성공적으로 생성/반환했습니다." ) ;
26+ } catch ( err : any ) {
27+ console . error ( err ) ;
28+ res . fail ( {
29+ error : err . name || "InternalServerError" ,
30+ message : err . message || "채팅방 생성/반환 중 오류가 발생했습니다." ,
31+ statusCode : err . statusCode || 500 ,
32+ } ) ;
33+ }
34+ } ;
35+
36+ export const getChatRoomDetail = async ( req : Request , res : Response ) : Promise < void > => {
37+ if ( ! req . user ) {
38+ res . fail ( {
39+ statusCode : 401 ,
40+ error : "no user" ,
41+ message : "로그인이 필요합니다." ,
42+ } ) ;
43+ return ;
44+ }
45+
46+ try {
47+ const userId = ( req . user as { user_id : number } ) . user_id ;
48+
49+ const roomId = Number ( req . params . roomId ) ;
50+ const cursor = req . query . cursor ? Number ( req . query . cursor ) : undefined ;
51+ const limit = req . query . limit ? Number ( req . query . limit ) : 20 ;
52+
53+ if ( isNaN ( roomId ) ) {
54+ res . fail ( { statusCode : 400 , error : "BadRequest" , message : "올바른 roomId 필요합니다." } ) ;
55+ return ;
56+ }
57+
58+ const result = await chatService . getChatRoomDetailService ( roomId , userId , cursor , limit ) ;
59+
60+ res . success ( result , "채팅방 상세를 성공적으로 조회했습니다." ) ;
61+ } catch ( err : any ) {
62+ console . error ( err ) ;
63+ res . fail ( {
64+ error : err . name || "InternalServerError" ,
65+ message : err . message || "채팅방 상세 조회 중 오류가 발생했습니다." ,
66+ statusCode : err . statusCode || 500 ,
67+ } ) ;
68+ }
69+ }
70+
71+ // == 채팅방 목록
72+ export const getChatRoomList = async ( req : Request , res : Response ) => {
73+ if ( ! req . user ) {
74+ res . fail ( {
75+ statusCode : 401 ,
76+ error : "no user" ,
77+ message : "로그인이 필요합니다." ,
78+ } ) ;
79+ return ;
80+ }
81+
82+ try {
83+ const userId = ( req . user as { user_id : number } ) . user_id ;
84+ const { cursor, limit, filter, search } = req . query as unknown as GetChatRoomListRequestDto ;
85+
86+ if ( filter && filter !== "all" && filter !== "unread" && filter !== "pinned" ) {
87+ res . fail ( { statusCode : 400 , error : "BadRequest" , message : "올바른 filter값이 필요합니다." } ) ;
88+ return ;
89+ }
90+
91+ const result = await chatService . getChatRoomListService (
92+ userId ,
93+ cursor ? Number ( cursor ) : undefined ,
94+ limit ? Number ( limit ) : undefined ,
95+ filter ,
96+ search as string
97+ ) ;
98+ res . success ( result , "채팅방 목록을 성공적으로 조회했습니다." ) ;
99+ } catch ( err : any ) {
100+ console . error ( err ) ;
101+ res . fail ( {
102+ error : err . name || "InternalServerError" ,
103+ message : err . message || "채팅방 목록 조회 중 오류가 발생했습니다." ,
104+ statusCode : err . statusCode || 500 ,
105+ } ) ;
106+ }
107+ }
0 commit comments