86 lines
3 KiB
TypeScript
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
|
|
});
|
|
}
|