102 lines
3.5 KiB
TypeScript
102 lines
3.5 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { getServerSession } from "next-auth/next";
|
|
import { authOptions } from "@/app/api/auth/[...nextauth]/route";
|
|
import { prisma } from "@/lib/prisma";
|
|
|
|
/**
|
|
* Handles the GET request to retrieve calendars for the authenticated user.
|
|
*
|
|
* @param {NextRequest} req - The incoming request object.
|
|
* @returns {Promise<NextResponse>} - A promise that resolves to a JSON response containing the calendars or an error message.
|
|
*
|
|
* The function performs the following steps:
|
|
* 1. Retrieves the server session using `getServerSession`.
|
|
* 2. Checks if the user is authenticated by verifying the presence of `session.user.id`.
|
|
* - If not authenticated, returns a 401 response with an error message.
|
|
* 3. Attempts to fetch the calendars associated with the authenticated user from the database.
|
|
* - If successful, returns the calendars in a JSON response.
|
|
* - If an error occurs during the database query, logs the error and returns a 500 response with an error message.
|
|
*/
|
|
export async function GET(req: NextRequest) {
|
|
const session = await getServerSession(authOptions);
|
|
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
|
|
}
|
|
|
|
try {
|
|
const calendars = await prisma.calendar.findMany({
|
|
where: {
|
|
userId: session.user.id,
|
|
},
|
|
include: {
|
|
events: {
|
|
orderBy: {
|
|
start: 'asc'
|
|
}
|
|
}
|
|
},
|
|
orderBy: {
|
|
createdAt: "desc",
|
|
},
|
|
});
|
|
|
|
console.log("Fetched calendars with events:", calendars);
|
|
return NextResponse.json(calendars);
|
|
} catch (error) {
|
|
console.error("Erreur lors de la récupération des calendriers:", error);
|
|
return NextResponse.json({ error: "Erreur serveur" }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles the POST request to create a new calendar.
|
|
*
|
|
* @param {NextRequest} req - The incoming request object.
|
|
* @returns {Promise<NextResponse>} The response object containing the created calendar or an error message.
|
|
*
|
|
* @throws {Error} If there is an issue with the request or server.
|
|
*
|
|
* The function performs the following steps:
|
|
* 1. Retrieves the server session using `getServerSession`.
|
|
* 2. Checks if the user is authenticated by verifying the presence of `session.user.id`.
|
|
* 3. Parses the request body to extract `name`, `color`, and `description`.
|
|
* 4. Validates that the `name` field is provided.
|
|
* 5. Creates a new calendar entry in the database using Prisma.
|
|
* 6. Returns the created calendar with a 201 status code.
|
|
* 7. Catches and logs any errors, returning a 500 status code with an error message.
|
|
*/
|
|
export async function POST(req: NextRequest) {
|
|
const session = await getServerSession(authOptions);
|
|
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
|
|
}
|
|
|
|
try {
|
|
const { name, color, description } = await req.json();
|
|
|
|
// Validation
|
|
if (!name) {
|
|
return NextResponse.json(
|
|
{ error: "Le nom du calendrier est requis" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const calendar = await prisma.calendar.create({
|
|
data: {
|
|
name,
|
|
color: color || "#0082c9",
|
|
description,
|
|
userId: session.user.id,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json(calendar, { status: 201 });
|
|
} catch (error) {
|
|
console.error("Erreur lors de la création du calendrier:", error);
|
|
return NextResponse.json({ error: "Erreur serveur" }, { status: 500 });
|
|
}
|
|
}
|