hgh_admin/resources/js/plugins/fake-api/handlers/apps/chat/index.js
2024-05-29 22:34:28 +05:00

82 lines
2.2 KiB
JavaScript

import { rest } from 'msw'
import { db } from '@db/apps/chat/db'
export const handlerAppsChat = [
rest.get(('/api/apps/chat/chats-and-contacts'), (req, res, ctx) => {
const q = req.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 res(ctx.status(200), ctx.json(response))
}),
rest.get(('/api/apps/chat/chats/:userId'), (req, res, ctx) => {
const userId = Number(req.params.userId)
const chat = db.chats.find(e => e.userId === userId)
if (chat)
chat.unseenMsgs = 0
return res(ctx.status(200), ctx.json({
chat,
contact: db.contacts.find(c => c.id === userId),
}))
}),
rest.post(('/api/apps/chat/chats/:userId'), async (req, res, ctx) => {
// Get user id from URL
const chatId = Number(req.params.userId)
// Get message from post data
const { message, senderId } = await req.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 res(ctx.status(201), ctx.json(response))
}),
]