diff --git a/apps/dispatch/app/_store/reportStore.ts b/apps/dispatch/app/_store/reportStore.ts index 3868b875..43d7e854 100644 --- a/apps/dispatch/app/_store/reportStore.ts +++ b/apps/dispatch/app/_store/reportStore.ts @@ -1,4 +1,5 @@ import { create } from "zustand"; +import { PrismaClient } from "@prisma/client"; interface ReportStore { ownId: null | string; @@ -13,4 +14,19 @@ export const useReportStore = create((set) => ({ setReportOpen: (open: boolean) => set({ reportOpen: open }), setOwnId: (id: string) => set({ ownId: id }), })); -// TODO: implement logic for reports + +const prisma = new PrismaClient(); + +export const sendReport = async (receiverId: string, message: string) => { + try { + await prisma.reportMessage.create({ + data: { + receiverId, + message, + }, + }); + } catch (error) { + console.error("Failed to send report:", error); + throw error; + } +}; diff --git a/apps/dispatch/app/dispatch/_components/left/Report.tsx b/apps/dispatch/app/dispatch/_components/left/Report.tsx index 2879a5ce..5650a16c 100644 --- a/apps/dispatch/app/dispatch/_components/left/Report.tsx +++ b/apps/dispatch/app/dispatch/_components/left/Report.tsx @@ -1,6 +1,6 @@ "use client"; import { ExclamationTriangleIcon, PaperPlaneIcon } from "@radix-ui/react-icons"; -import { useReportStore } from "_store/reportStore"; +import { useReportStore, sendReport } from "_store/reportStore"; import { useSession } from "next-auth/react"; import { useEffect, useRef, useState } from "react"; import { @@ -107,13 +107,14 @@ export const Report = () => { e.preventDefault(); if (message.length < 1 || !selectedPlayer) return; setSending(true); - // TODO: Implement logic for reports - /* sendReport(selectedPlayer, message).then(() => { - setMessage(""); - setSending(false); - }); */ - setMessage(""); - setSending(false); + sendReport(selectedPlayer, message) + .then(() => { + setMessage(""); + setSending(false); + }) + .catch(() => { + setSending(false); + }); }} disabled={sending} > diff --git a/packages/database/prisma/schema/reportMessage.prisma b/packages/database/prisma/schema/reportMessage.prisma new file mode 100644 index 00000000..6cf01427 --- /dev/null +++ b/packages/database/prisma/schema/reportMessage.prisma @@ -0,0 +1,13 @@ +model ReportMessage { + id Int @id @default(autoincrement()) + text String + senderId String + reportedId String + timestamp DateTime @default(now()) + reportedName String + senderName String + + // relations: + sender User @relation("SentReports", fields: [senderId], references: [id]) + reported User @relation("ReceivedReports", fields: [reportedId], references: [id]) +} diff --git a/packages/database/prisma/schema/user.prisma b/packages/database/prisma/schema/user.prisma index f8de9500..d9b7e357 100644 --- a/packages/database/prisma/schema/user.prisma +++ b/packages/database/prisma/schema/user.prisma @@ -43,6 +43,8 @@ model User { EventAppointment EventAppointment[] SentMessages ChatMessage[] @relation("SentMessages") ReceivedMessages ChatMessage[] @relation("ReceivedMessages") + SentReports ReportMessage[] @relation("SentReports") + ReceivedReports ReportMessage[] @relation("ReceivedReports") /** * Missions Mission[] */