85 lines
2.3 KiB
JavaScript
85 lines
2.3 KiB
JavaScript
|
|
import { HttpResponse, http } from 'msw'
|
||
|
|
import { db } from '@db/apps/chat/db'
|
||
|
|
|
||
|
|
export const handlerAppsChat = [
|
||
|
|
http.get(('/api/apps/chat/chats-and-contacts'), ({ request }) => {
|
||
|
|
const url = new URL(request.url)
|
||
|
|
const q = url.searchParams.get('q') || ''
|
||
|
|
const qLowered = q.toLowerCase()
|
||
|
|
|
||
|
|
const chatsContacts = db.chats
|
||
|
|
.map(chat => {
|
||
|
|
const contact = JSON.parse(JSON.stringify(db.contacts.find(c => c.id === chat.userId)))
|
||
|
|
|
||
|
|
contact.chat = { id: chat.id, unseenMsgs: chat.unseenMsgs, lastMessage: chat.messages.at(-1) }
|
||
|
|
|
||
|
|
return contact
|
||
|
|
})
|
||
|
|
.reverse()
|
||
|
|
|
||
|
|
const profileUserData = db.profileUser
|
||
|
|
|
||
|
|
const response = {
|
||
|
|
chatsContacts: chatsContacts.filter(c => c.fullName.toLowerCase().includes(qLowered)),
|
||
|
|
contacts: db.contacts.filter(c => c.fullName.toLowerCase().includes(qLowered)),
|
||
|
|
profileUser: profileUserData,
|
||
|
|
}
|
||
|
|
|
||
|
|
return HttpResponse.json(response, { status: 200 })
|
||
|
|
}),
|
||
|
|
http.get(('/api/apps/chat/chats/:userId'), ({ params }) => {
|
||
|
|
const userId = Number(params.userId)
|
||
|
|
const chat = db.chats.find(e => e.userId === userId)
|
||
|
|
if (chat)
|
||
|
|
chat.unseenMsgs = 0
|
||
|
|
|
||
|
|
return HttpResponse.json({
|
||
|
|
chat,
|
||
|
|
contact: db.contacts.find(c => c.id === userId),
|
||
|
|
}, {
|
||
|
|
status: 200,
|
||
|
|
})
|
||
|
|
}),
|
||
|
|
http.post(('/api/apps/chat/chats/:userId'), async ({ request, params }) => {
|
||
|
|
// Get user id from URL
|
||
|
|
const chatId = Number(params.userId)
|
||
|
|
|
||
|
|
// Get message from post data
|
||
|
|
const { message, senderId } = await request.json()
|
||
|
|
let activeChat = db.chats.find(chat => chat.userId === chatId)
|
||
|
|
|
||
|
|
const newMessageData = {
|
||
|
|
message,
|
||
|
|
time: String(new Date()),
|
||
|
|
senderId,
|
||
|
|
feedback: {
|
||
|
|
isSent: true,
|
||
|
|
isDelivered: false,
|
||
|
|
isSeen: false,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// If there's new chat for user create one
|
||
|
|
let isNewChat = false
|
||
|
|
if (activeChat === undefined) {
|
||
|
|
isNewChat = true
|
||
|
|
db.chats.push({
|
||
|
|
id: db.chats.length + 1,
|
||
|
|
userId: chatId,
|
||
|
|
unseenMsgs: 0,
|
||
|
|
messages: [newMessageData],
|
||
|
|
})
|
||
|
|
activeChat = db.chats.at(-1)
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
activeChat.messages.push(newMessageData)
|
||
|
|
}
|
||
|
|
const response = { msg: newMessageData }
|
||
|
|
if (isNewChat)
|
||
|
|
response.chat = activeChat
|
||
|
|
|
||
|
|
return HttpResponse.json(response, { status: 201 })
|
||
|
|
}),
|
||
|
|
]
|