announcement

This commit is contained in:
alma 2025-05-04 21:47:51 +02:00
parent 79cd8172e3
commit ee42151521
2 changed files with 68 additions and 13 deletions

View File

@ -3,6 +3,22 @@ import { getServerSession } from "next-auth/next";
import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { authOptions } from "@/app/api/auth/[...nextauth]/route";
import { prisma } from "@/lib/prisma"; import { prisma } from "@/lib/prisma";
/**
* Check if a user exists in the database
*/
async function userExists(userId: string): Promise<boolean> {
try {
const user = await prisma.user.findUnique({
where: { id: userId },
select: { id: true }
});
return !!user;
} catch (error) {
console.error(`Error checking if user exists:`, error);
return false;
}
}
// GET - Retrieve a specific announcement // GET - Retrieve a specific announcement
export async function GET( export async function GET(
req: NextRequest, req: NextRequest,
@ -40,7 +56,7 @@ export async function GET(
const hasAccess = const hasAccess =
announcement.targetRoles.includes("all") || announcement.targetRoles.includes("all") ||
announcement.targetRoles.some(role => roles.includes(role)); announcement.targetRoles.some((role: string) => roles.includes(role));
if (!hasAccess) { if (!hasAccess) {
return NextResponse.json({ error: "Forbidden" }, { status: 403 }); return NextResponse.json({ error: "Forbidden" }, { status: 403 });
@ -49,7 +65,11 @@ export async function GET(
return NextResponse.json(announcement); return NextResponse.json(announcement);
} catch (error) { } catch (error) {
console.error("Error fetching announcement:", error); console.error("Error fetching announcement:", error);
return NextResponse.json({ error: "Failed to fetch announcement" }, { status: 500 }); const errorMessage = error instanceof Error ? error.message : "Unknown error";
return NextResponse.json({
error: "Failed to fetch announcement",
details: errorMessage
}, { status: 500 });
} }
} }
@ -65,6 +85,17 @@ export async function DELETE(
return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
} }
// Verify user exists in database
const userExistsInDB = await userExists(session.user.id);
if (!userExistsInDB) {
console.error("User not found in database:", session.user.id);
return NextResponse.json({
error: "User not found",
details: `The user ID from your session (${session.user.id}) doesn't exist in the database.`
}, { status: 400 });
}
// Check if user has admin, entrepreneurship, or communication role // Check if user has admin, entrepreneurship, or communication role
const userRole = session.user.role || []; const userRole = session.user.role || [];
const roles = Array.isArray(userRole) ? userRole : [userRole]; const roles = Array.isArray(userRole) ? userRole : [userRole];
@ -95,6 +126,13 @@ export async function DELETE(
return NextResponse.json({ message: "Announcement deleted successfully" }); return NextResponse.json({ message: "Announcement deleted successfully" });
} catch (error) { } catch (error) {
console.error("Error deleting announcement:", error); console.error("Error deleting announcement:", error);
return NextResponse.json({ error: "Failed to delete announcement" }, { status: 500 }); const errorMessage = error instanceof Error ? error.message : "Unknown error";
const errorCode = error.code || "UNKNOWN";
return NextResponse.json({
error: "Failed to delete announcement",
details: errorMessage,
code: errorCode
}, { status: 500 });
} }
} }

View File

@ -3,6 +3,22 @@ import { getServerSession } from "next-auth/next";
import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { authOptions } from "@/app/api/auth/[...nextauth]/route";
import { prisma } from "@/lib/prisma"; import { prisma } from "@/lib/prisma";
/**
* Check if a user exists in the database
*/
async function userExists(userId: string): Promise<boolean> {
try {
const user = await prisma.user.findUnique({
where: { id: userId },
select: { id: true }
});
return !!user;
} catch (error) {
console.error(`Error checking if user exists:`, error);
return false;
}
}
// GET - Retrieve all announcements (with role filtering) // GET - Retrieve all announcements (with role filtering)
export async function GET(req: NextRequest) { export async function GET(req: NextRequest) {
try { try {
@ -72,18 +88,16 @@ export async function POST(req: NextRequest) {
return NextResponse.json({ error: "Missing required fields" }, { status: 400 }); return NextResponse.json({ error: "Missing required fields" }, { status: 400 });
} }
// Verify user exists in database // Verify user exists in database (using session user id)
console.log("Verifying user ID:", session.user.id); console.log("Verifying user ID:", session.user.id);
const user = await prisma.user.findUnique({ const userExistsInDB = await userExists(session.user.id);
where: { id: session.user.id }
});
if (!user) { if (!userExistsInDB) {
console.error("Author not found in database:", session.user.id); console.error("User not found in database:", session.user.id);
return NextResponse.json({ return NextResponse.json({
error: "Author not found", error: "User not found",
details: "The user account does not exist in the database" details: `The user ID from your session (${session.user.id}) doesn't exist in the database. This may be due to a session/database mismatch or the user hasn't been synced to the application database.`
}, { status: 400 }); }, { status: 400 });
} }
@ -101,10 +115,13 @@ export async function POST(req: NextRequest) {
} catch (error) { } catch (error) {
console.error("Error creating announcement:", error); console.error("Error creating announcement:", error);
// Return more detailed error information // Return more detailed error information
const errorMessage = error instanceof Error ? error.message : "Unknown error";
const errorCode = error.code || "UNKNOWN";
return NextResponse.json({ return NextResponse.json({
error: "Failed to create announcement", error: "Failed to create announcement",
details: error.message || "Unknown error", details: errorMessage,
code: error.code code: errorCode
}, { status: 500 }); }, { status: 500 });
} }
} }