11 getUnreadMessageCounts
12} from "../database/queries.ts";
13import { ApiResponse, ChatRoom, ChatRoomMessage, Message, User } from "../../shared/types.ts";
14
15export const chatRouter = new Hono();
20 const chatRooms = await getChatRooms();
21
22 return c.json<ApiResponse<{ chatRooms: ChatRoom[] }>>({
23 success: true,
24 data: {
28 } catch (error) {
29 console.error("Get chat rooms error:", error);
30 return c.json<ApiResponse<null>>({
31 success: false,
32 error: "Internal server error"
43
44 if (isNaN(chatRoomId)) {
45 return c.json<ApiResponse<null>>({
46 success: false,
47 error: "Invalid chat room ID"
52
53 if (!success) {
54 return c.json<ApiResponse<null>>({
55 success: false,
56 error: "Failed to join chat room"
58 }
59
60 return c.json<ApiResponse<{ success: boolean }>>({
61 success: true,
62 data: {
66 } catch (error) {
67 console.error("Join chat room error:", error);
68 return c.json<ApiResponse<null>>({
69 success: false,
70 error: "Internal server error"
81
82 if (isNaN(chatRoomId)) {
83 return c.json<ApiResponse<null>>({
84 success: false,
85 error: "Invalid chat room ID"
90
91 if (!success) {
92 return c.json<ApiResponse<null>>({
93 success: false,
94 error: "Failed to leave chat room"
96 }
97
98 return c.json<ApiResponse<{ success: boolean }>>({
99 success: true,
100 data: {
104 } catch (error) {
105 console.error("Leave chat room error:", error);
106 return c.json<ApiResponse<null>>({
107 success: false,
108 error: "Internal server error"
117
118 if (isNaN(chatRoomId)) {
119 return c.json<ApiResponse<null>>({
120 success: false,
121 error: "Invalid chat room ID"
125 const messages = await getChatRoomMessages(chatRoomId);
126
127 return c.json<ApiResponse<{ messages: ChatRoomMessage[] }>>({
128 success: true,
129 data: {
133 } catch (error) {
134 console.error("Get chat room messages error:", error);
135 return c.json<ApiResponse<null>>({
136 success: false,
137 error: "Internal server error"
146
147 if (isNaN(chatRoomId)) {
148 return c.json<ApiResponse<null>>({
149 success: false,
150 error: "Invalid chat room ID"
154 const members = await getChatRoomMembers(chatRoomId);
155
156 return c.json<ApiResponse<{ members: User[] }>>({
157 success: true,
158 data: {
162 } catch (error) {
163 console.error("Get chat room members error:", error);
164 return c.json<ApiResponse<null>>({
165 success: false,
166 error: "Internal server error"
180
181 if (isNaN(receiverId)) {
182 return c.json<ApiResponse<null>>({
183 success: false,
184 error: "Invalid user ID"
187
188 if (!content || content.trim() === "") {
189 return c.json<ApiResponse<null>>({
190 success: false,
191 error: "Content is required"
196
197 if (!message) {
198 return c.json<ApiResponse<null>>({
199 success: false,
200 error: "Failed to send message"
202 }
203
204 return c.json<ApiResponse<{ message: Message }>>({
205 success: true,
206 data: {
210 } catch (error) {
211 console.error("Send direct message error:", error);
212 return c.json<ApiResponse<null>>({
213 success: false,
214 error: "Internal server error"
225
226 if (isNaN(otherUserId)) {
227 return c.json<ApiResponse<null>>({
228 success: false,
229 error: "Invalid user ID"
236 await markMessagesAsRead(userId, otherUserId);
237
238 return c.json<ApiResponse<{ messages: Message[] }>>({
239 success: true,
240 data: {
244 } catch (error) {
245 console.error("Get direct messages error:", error);
246 return c.json<ApiResponse<null>>({
247 success: false,
248 error: "Internal server error"
259
260 if (isNaN(otherUserId)) {
261 return c.json<ApiResponse<null>>({
262 success: false,
263 error: "Invalid user ID"
267 const success = await markMessagesAsRead(userId, otherUserId);
268
269 return c.json<ApiResponse<{ success: boolean }>>({
270 success: true,
271 data: {
275 } catch (error) {
276 console.error("Mark messages as read error:", error);
277 return c.json<ApiResponse<null>>({
278 success: false,
279 error: "Internal server error"
290 const unreadCounts = await getUnreadMessageCounts(userId);
291
292 return c.json<ApiResponse<{ unreadCounts: { [senderId: string]: number } }>>({
293 success: true,
294 data: {
298 } catch (error) {
299 console.error("Get unread message counts error:", error);
300 return c.json<ApiResponse<null>>({
301 success: false,
302 error: "Internal server error"