import { NextRequest, NextResponse } from "next/server"; import { TeamsService } from "@/services/teams-service"; // GET - Récupérer toutes les teams export async function GET() { try { const teams = await TeamsService.getAllTeamsWithMemberCount(); return NextResponse.json(teams); } catch (error) { console.error("Error fetching teams:", error); return NextResponse.json( { error: "Erreur lors de la récupération des teams" }, { status: 500 } ); } } // POST - Créer une nouvelle team export async function POST(request: NextRequest) { try { const { name, direction } = await request.json(); if (!name || !direction) { return NextResponse.json( { error: "Le nom et la direction sont requis" }, { status: 400 } ); } try { const team = await TeamsService.createTeamForAdmin({ name, direction, }); return NextResponse.json(team, { status: 201 }); } catch (error: any) { if (error.message === "Une équipe avec ce nom existe déjà") { return NextResponse.json({ error: error.message }, { status: 409 }); } throw error; } } catch (error) { console.error("Error creating team:", error); return NextResponse.json( { error: "Erreur lors de la création de l'équipe" }, { status: 500 } ); } } // PUT - Mettre à jour une team export async function PUT(request: NextRequest) { try { const { id, name, direction } = await request.json(); if (!id || !name || !direction) { return NextResponse.json( { error: "L'ID, le nom et la direction sont requis" }, { status: 400 } ); } try { const team = await TeamsService.updateTeamForAdmin({ id, name, direction, }); return NextResponse.json(team); } catch (error: any) { if (error.message === "Équipe non trouvée") { return NextResponse.json({ error: error.message }, { status: 404 }); } if (error.message === "Une équipe avec ce nom existe déjà") { return NextResponse.json({ error: error.message }, { status: 409 }); } throw error; } } catch (error) { console.error("Error updating team:", error); return NextResponse.json( { error: "Erreur lors de la mise à jour de l'équipe" }, { status: 500 } ); } } // DELETE - Supprimer une team ou une direction export async function DELETE(request: NextRequest) { try { const { searchParams } = new URL(request.url); const id = searchParams.get("id"); const direction = searchParams.get("direction"); if (!id && !direction) { return NextResponse.json( { error: "L'ID de l'équipe ou la direction est requis" }, { status: 400 } ); } try { const result = await TeamsService.deleteTeamOrDirectionForAdmin({ id: id || undefined, direction: direction || undefined, }); return NextResponse.json(result); } catch (error: any) { if ( error.message.includes("Impossible de supprimer") || error.message.includes("contient des membres") ) { return NextResponse.json({ error: error.message }, { status: 409 }); } throw error; } } catch (error) { console.error("Error deleting team/direction:", error); return NextResponse.json( { error: "Erreur lors de la suppression" }, { status: 500 } ); } }