Spaces:
Build error
Build error
Gmagl
fix: corregir ESLint v10→v9, bug de slug en Character, eliminar webhook duplicado, añadir páginas success/cancel, limpiar build.log
21b315e | import { NextRequest, NextResponse } from "next/server"; | |
| import { db } from "@/lib/db"; | |
| import ZAI from "z-ai-web-dev-sdk"; | |
| export async function GET(request: NextRequest) { | |
| try { | |
| const characters = await db.character.findMany({ orderBy: { createdAt: "desc" } }); | |
| return NextResponse.json({ success: true, characters, total: characters.length }); | |
| } catch { | |
| return NextResponse.json({ success: false, error: "Error" }, { status: 500 }); | |
| } | |
| } | |
| export async function POST(request: NextRequest) { | |
| try { | |
| const body = await request.json(); | |
| const { name, description, generateReference, traits } = body; | |
| if (!name) { | |
| return NextResponse.json({ success: false, error: "Nombre requerido" }, { status: 400 }); | |
| } | |
| // Generate a unique slug from the name | |
| const baseSlug = name | |
| .toLowerCase() | |
| .normalize("NFD") | |
| .replace(/[\u0300-\u036f]/g, "") // Remove diacritics | |
| .replace(/[^a-z0-9]+/g, "-") | |
| .replace(/^-|-$/g, ""); | |
| let slug = baseSlug; | |
| let slugExists = await db.character.findUnique({ where: { slug } }); | |
| let attempt = 0; | |
| while (slugExists) { | |
| attempt++; | |
| slug = `${baseSlug}-${attempt}`; | |
| slugExists = await db.character.findUnique({ where: { slug } }); | |
| } | |
| let referenceImage: string | null = null; | |
| let characterTraits: string | null = null; | |
| if (generateReference) { | |
| try { | |
| const zai = await ZAI.create(); | |
| const response = await zai.images.generations.create({ | |
| prompt: "Character reference: " + name + ", " + (description || "original character"), | |
| size: "1024x1024" | |
| }); | |
| const imageBase64 = response.data[0]?.base64; | |
| if (imageBase64) { | |
| referenceImage = "generated_" + Date.now(); | |
| if (!traits) { | |
| characterTraits = JSON.stringify({ name, description }); | |
| } | |
| } | |
| } catch { } | |
| } | |
| const finalTraits = traits || characterTraits || JSON.stringify({ name }); | |
| const character = await db.character.create({ | |
| data: { | |
| name, | |
| slug, | |
| description: description ? String(description) : null, | |
| referenceImage: referenceImage ? String(referenceImage) : null, | |
| traits: String(finalTraits) | |
| } | |
| }); | |
| return NextResponse.json({ success: true, character }); | |
| } catch { | |
| return NextResponse.json({ success: false, error: "Error" }, { status: 500 }); | |
| } | |
| } | |
| export async function PUT(request: NextRequest) { | |
| try { | |
| const body = await request.json(); | |
| const { id, name, description, traits } = body; | |
| if (!id) return NextResponse.json({ success: false, error: "ID requerido" }, { status: 400 }); | |
| const data: { name?: string; description?: string | null; traits?: string } = {}; | |
| if (name) data.name = name; | |
| if (description !== undefined) data.description = description || null; | |
| if (traits) data.traits = traits; | |
| const character = await db.character.update({ where: { id }, data }); | |
| return NextResponse.json({ success: true, character }); | |
| } catch { | |
| return NextResponse.json({ success: false, error: "Error" }, { status: 500 }); | |
| } | |
| } | |
| export async function DELETE(request: NextRequest) { | |
| try { | |
| const { searchParams } = new URL(request.url); | |
| const id = searchParams.get("id"); | |
| if (!id) return NextResponse.json({ success: false, error: "ID requerido" }, { status: 400 }); | |
| await db.pet.deleteMany({ where: { characterId: id } }); | |
| await db.content.updateMany({ where: { characterId: id }, data: { characterId: null } }); | |
| await db.character.delete({ where: { id } }); | |
| return NextResponse.json({ success: true }); | |
| } catch { | |
| return NextResponse.json({ success: false, error: "Error" }, { status: 500 }); | |
| } | |
| } |