import { NextResponse } from 'next/server'; import { auth } from '@/lib/auth'; import { createOKR } from '@/services/okrs'; import { getTeamMemberById, isTeamAdmin } from '@/services/teams'; import type { CreateOKRInput, CreateKeyResultInput } from '@/lib/types'; export async function POST(request: Request) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const body = await request.json(); const { teamMemberId, objective, description, period, startDate, endDate, keyResults } = body as CreateOKRInput & { startDate: string | Date; endDate: string | Date; }; if (!teamMemberId || !objective || !period || !startDate || !endDate || !keyResults) { return NextResponse.json({ error: 'Champs requis manquants' }, { status: 400 }); } // Get team member to check permissions const teamMember = await getTeamMemberById(teamMemberId); if (!teamMember) { return NextResponse.json({ error: "Membre de l'équipe non trouvé" }, { status: 404 }); } // Check if user is admin of the team const isAdmin = await isTeamAdmin(teamMember.team.id, session.user.id); if (!isAdmin) { return NextResponse.json( { error: 'Seuls les administrateurs peuvent créer des OKRs' }, { status: 403 } ); } // Convert dates to Date objects if they are strings const startDateObj = startDate instanceof Date ? startDate : new Date(startDate); const endDateObj = endDate instanceof Date ? endDate : new Date(endDate); // Validate dates if (isNaN(startDateObj.getTime()) || isNaN(endDateObj.getTime())) { return NextResponse.json({ error: 'Dates invalides' }, { status: 400 }); } // Ensure all key results have a unit and order const keyResultsWithUnit = keyResults.map((kr: CreateKeyResultInput, index: number) => ({ ...kr, unit: kr.unit || '%', order: kr.order !== undefined ? kr.order : index, })); const okr = await createOKR( teamMemberId, objective, description || null, period, startDateObj, endDateObj, keyResultsWithUnit ); return NextResponse.json(okr, { status: 201 }); } catch (error) { console.error('Error creating OKR:', error); const errorMessage = error instanceof Error ? error.message : "Erreur lors de la création de l'OKR"; return NextResponse.json({ error: errorMessage }, { status: 500 }); } }