espace-paie-odentas/app/api/tickets/[id]/recipient-info/route.ts

86 lines
3 KiB
TypeScript

import { NextResponse } from "next/server";
import { createSbServer, createSbServiceRole } from "@/lib/supabaseServer";
export const dynamic = "force-dynamic";
export async function GET(_: Request, { params }: { params: { id: string } }) {
const sb = createSbServer();
const { data: { user } } = await sb.auth.getUser();
if (!user) return new NextResponse("Unauthorized", { status: 401 });
// Vérifier si l'utilisateur est staff
const { data: staffUser } = await sb
.from("staff_users")
.select("is_staff")
.eq("user_id", user.id)
.maybeSingle();
if (!staffUser?.is_staff) {
return new NextResponse("Forbidden", { status: 403 });
}
// Récupérer le ticket
const { data: ticket } = await sb
.from("tickets")
.select("created_by, org_id")
.eq("id", params.id)
.single();
console.log('📋 [recipient-info] Ticket ID:', params.id);
console.log('📋 [recipient-info] Ticket data:', ticket);
if (!ticket || !ticket.created_by) {
console.error('❌ [recipient-info] Ticket ou created_by introuvable');
return NextResponse.json({ error: "Ticket ou créateur introuvable" }, { status: 404 });
}
console.log('📋 [recipient-info] Created by:', ticket.created_by);
// Utiliser le service role pour accéder aux données auth
const sbAdmin = createSbServiceRole();
// Récupérer l'email et les métadonnées de l'utilisateur créateur
const { data: creatorUser, error: userError } = await sbAdmin.auth.admin.getUserById(ticket.created_by);
console.log('📋 [recipient-info] getUserById result:', {
hasData: !!creatorUser,
hasUser: !!creatorUser?.user,
hasEmail: !!creatorUser?.user?.email,
error: userError
});
if (!creatorUser?.user?.email) {
console.error('❌ [recipient-info] Email introuvable pour user:', ticket.created_by);
console.error('❌ [recipient-info] creatorUser:', creatorUser);
console.error('❌ [recipient-info] userError:', userError);
return NextResponse.json({ error: "Email introuvable" }, { status: 404 });
}
// Récupérer le nom depuis les métadonnées utilisateur
let name = creatorUser.user.email;
const metadata = creatorUser.user.user_metadata;
console.log('📋 [recipient-info] User metadata:', JSON.stringify(metadata, null, 2));
// Priorité 1: display_name (c'est là que Supabase Auth stocke le prénom)
if (metadata?.display_name) {
name = metadata.display_name;
console.log('✅ [recipient-info] Nom trouvé dans display_name:', name);
}
// Priorité 2: first_name + last_name
else if (metadata?.first_name) {
name = metadata.last_name
? `${metadata.first_name} ${metadata.last_name}`
: metadata.first_name;
console.log('✅ [recipient-info] Nom trouvé dans first_name:', name);
}
else {
console.log('⚠️ [recipient-info] Aucun nom trouvé, utilisation de l\'email');
}
// Sinon: email par défaut (déjà défini)
return NextResponse.json({
email: creatorUser.user.email,
name: name
});
}