File size: 2,047 Bytes
811126d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";
import { ElevenLabsClient } from "@/utils/elevenlabs";

export async function POST(request: Request) {
  try {
    const data = await request.formData();
    const audioFile = data.get("audio") as File;
    const name = data.get("name") as string;

    if (!audioFile || !name) {
      return NextResponse.json(
        { error: "Le fichier audio et le nom sont requis" },
        { status: 400 }
      );
    }

    // Vérifier la clé API ElevenLabs
    if (!process.env.ELEVENLABS_API_KEY) {
      console.error("Clé API ElevenLabs manquante");
      // Pour le moment, on continue sans ElevenLabs
      const user = await prisma.user.create({
        data: {
          name,
        },
      });

      return NextResponse.json({
        id: user.id,
        name: user.name,
      });
    }

    // Créer l'utilisateur
    const user = await prisma.user.create({
      data: {
        name,
      },
    });

    try {
      // Initialiser le client ElevenLabs
      const elevenlabs = new ElevenLabsClient(process.env.ELEVENLABS_API_KEY);

      // Ajouter la voix à ElevenLabs
      const voiceId = await elevenlabs.addVoice(name, audioFile);
      console.log("Voice ID reçu:", voiceId);

      // Mettre à jour l'utilisateur avec l'ID de la voix
      const updatedUser = await prisma.user.update({
        where: { id: user.id },
        data: {
          voiceId,
        },
      });

      return NextResponse.json({
        id: updatedUser.id,
        name: updatedUser.name,
        voiceId: updatedUser.voiceId,
      });
    } catch (error) {
      console.error("Erreur ElevenLabs:", error);
      // Pour le moment, on continue sans l'ID de voix
      return NextResponse.json({
        id: user.id,
        name: user.name,
      });
    }
  } catch (error) {
    console.error("Erreur lors du traitement de la voix:", error);
    return NextResponse.json(
      { error: "Impossible de traiter la voix" },
      { status: 500 }
    );
  }
}