From 79cd8172e34163c1a7b765c4994b2fa08c74c3f7 Mon Sep 17 00:00:00 2001 From: alma Date: Sun, 4 May 2025 21:45:24 +0200 Subject: [PATCH] announcement --- app/api/announcements/route.ts | 22 +++++++++++++++- components/announcement/announcement-form.tsx | 26 ++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/api/announcements/route.ts b/app/api/announcements/route.ts index 4c366973..8bdd666f 100644 --- a/app/api/announcements/route.ts +++ b/app/api/announcements/route.ts @@ -72,6 +72,21 @@ export async function POST(req: NextRequest) { return NextResponse.json({ error: "Missing required fields" }, { status: 400 }); } + // Verify user exists in database + console.log("Verifying user ID:", session.user.id); + + const user = await prisma.user.findUnique({ + where: { id: session.user.id } + }); + + if (!user) { + console.error("Author not found in database:", session.user.id); + return NextResponse.json({ + error: "Author not found", + details: "The user account does not exist in the database" + }, { status: 400 }); + } + // Create new announcement const announcement = await prisma.announcement.create({ data: { @@ -85,6 +100,11 @@ export async function POST(req: NextRequest) { return NextResponse.json(announcement, { status: 201 }); } catch (error) { console.error("Error creating announcement:", error); - return NextResponse.json({ error: "Failed to create announcement" }, { status: 500 }); + // Return more detailed error information + return NextResponse.json({ + error: "Failed to create announcement", + details: error.message || "Unknown error", + code: error.code + }, { status: 500 }); } } \ No newline at end of file diff --git a/components/announcement/announcement-form.tsx b/components/announcement/announcement-form.tsx index c2cea95f..04738bf0 100644 --- a/components/announcement/announcement-form.tsx +++ b/components/announcement/announcement-form.tsx @@ -30,9 +30,10 @@ import { CardHeader, CardTitle } from "@/components/ui/card"; -import { CheckIcon, Loader2 } from "lucide-react"; +import { CheckIcon, Loader2, AlertCircle } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { useToast } from "@/components/ui/use-toast"; +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; // Form schema const formSchema = z.object({ @@ -49,6 +50,7 @@ export function AnnouncementForm({ userRole }: AnnouncementFormProps) { const [selectedRoles, setSelectedRoles] = useState([]); const [isSubmitting, setIsSubmitting] = useState(false); const [isSuccess, setIsSuccess] = useState(false); + const [errorMsg, setErrorMsg] = useState(null); const { toast } = useToast(); // Initialize form @@ -99,6 +101,7 @@ export function AnnouncementForm({ userRole }: AnnouncementFormProps) { // Form submission const onSubmit = async (data: z.infer) => { setIsSubmitting(true); + setErrorMsg(null); try { // Send the data to the API @@ -110,8 +113,17 @@ export function AnnouncementForm({ userRole }: AnnouncementFormProps) { body: JSON.stringify(data), }); + // Parse response, even if it's an error + const result = await response.json(); + if (!response.ok) { - throw new Error('Failed to create announcement'); + let errorMessage = result.error || 'Failed to create announcement'; + if (result.details) { + errorMessage += `: ${result.details}`; + } + console.error("API Error:", result); + setErrorMsg(errorMessage); + throw new Error(errorMessage); } // Reset form and show success message @@ -130,7 +142,7 @@ export function AnnouncementForm({ userRole }: AnnouncementFormProps) { console.error("Error submitting announcement:", error); toast({ title: "Error", - description: "Failed to create the announcement. Please try again.", + description: error instanceof Error ? error.message : "Failed to create the announcement. Please try again.", variant: "destructive", }); } finally { @@ -147,6 +159,14 @@ export function AnnouncementForm({ userRole }: AnnouncementFormProps) { + {errorMsg && ( + + + Error + {errorMsg} + + )} +