95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
import { currentProfilePages } from "@/lib/current-profile-pages";
|
|
import { NextApiResponseServerIo } from "@/types";
|
|
import { NextApiRequest } from "next";
|
|
import { db } from "@/lib/db";
|
|
|
|
export default async function handler(req: NextApiRequest, res: NextApiResponseServerIo) {
|
|
if (req.method !== "POST") {
|
|
return res.status(405).json({ error: "Method not allowed" });
|
|
}
|
|
|
|
try {
|
|
const profile = await currentProfilePages(req);
|
|
const { content, fileUrl } = req.body;
|
|
const { conversationId } = req.query;
|
|
|
|
if (!profile) {
|
|
return res.status(401).json({ error: "Unauthorized" });
|
|
}
|
|
|
|
if (!conversationId) {
|
|
return res.status(400).json({ error: "Conversation ID Missing" });
|
|
}
|
|
|
|
if (!content) {
|
|
return res.status(400).json({ error: "Content Missing" });
|
|
}
|
|
|
|
const conversation = await db.conversation.findFirst({
|
|
where: {
|
|
id: conversationId as string,
|
|
OR: [
|
|
{
|
|
memberOne: {
|
|
profileId: profile.id
|
|
}
|
|
},
|
|
{
|
|
memberTwo: {
|
|
profileId: profile.id
|
|
}
|
|
},
|
|
]
|
|
},
|
|
include: {
|
|
memberOne: {
|
|
include: {
|
|
profile: true
|
|
}
|
|
},
|
|
memberTwo: {
|
|
include: {
|
|
profile: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!conversation) {
|
|
return res.status(404).json({ error: "Conversation not found" });
|
|
}
|
|
|
|
const member = conversation.memberOne.profileId === profile.id ?
|
|
conversation.memberOne : conversation.memberTwo;
|
|
|
|
if (!member) {
|
|
return res.status(401).json({ error: "Member not found" });
|
|
}
|
|
|
|
const message = await db.directMessage.create({
|
|
data: {
|
|
content,
|
|
fileUrl,
|
|
conversationId: conversationId as string,
|
|
memberId: member.id,
|
|
},
|
|
include: {
|
|
member: {
|
|
include: {
|
|
profile: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
const channelKey = `chat:${conversationId}:messages`;
|
|
|
|
res?.socket?.server?.io?.emit(channelKey, message);
|
|
|
|
return res.status(200).json({ message });
|
|
}
|
|
catch (error) {
|
|
console.log("[DIRECT_MESSAGES_POST]", error);
|
|
return res.status(500).json({ message: "Internal Error" });
|
|
}
|
|
} |