Add room invites and chat moderation
All checks were successful
Template Compliance / compliance (push) Successful in 7s

This commit is contained in:
ToxicCrzay270
2026-06-11 14:39:08 +02:00
parent 1b68be8802
commit 699232f5c6
5 changed files with 200 additions and 27 deletions

View File

@@ -160,6 +160,16 @@ app.prepare().then(() => {
await broadcastRoom(io, room.slug, room.id);
}));
socket.on("chat:delete", (payload) => safeRoomAction(socket, async ({ room, user }) => {
if (!canManageRoom(room, user.id, user)) return reject(socket, "Only room managers can moderate chat.");
const messageId = String(payload?.messageId || "");
if (!messageId) return;
const result = await prisma.roomMessage.deleteMany({ where: { id: messageId, roomId: room.id } });
if (result.count === 0) return;
await audit("room.chat.delete", user.id, room.id, { messageId });
await broadcastRoom(io, room.slug, room.id);
}));
socket.on("disconnect", () => {
const roomSlug = socket.data.roomSlug;
const user = socket.data.user;
@@ -276,6 +286,11 @@ async function getRoomContext(slug, userId) {
return { allowed, room };
}
function canManageRoom(room, userId, user) {
const isAdmin = Boolean(user?.roles?.some((userRole) => userRole.role.name === "admin"));
return room.ownerId === userId || isAdmin || room.members.some((member) => member.userId === userId && member.canManage);
}
async function buildRoomSnapshot(roomId) {
const room = await prisma.room.findUnique({
where: { id: roomId },