first commit
This commit is contained in:
81
resources/js/plugins/fake-api/handlers/apps/chat/index.js
Normal file
81
resources/js/plugins/fake-api/handlers/apps/chat/index.js
Normal file
@@ -0,0 +1,81 @@
|
||||
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))
|
||||
}),
|
||||
]
|
Reference in New Issue
Block a user