Spaces:
Build error
Build error
| import { NextRequest, NextResponse } from "next/server"; | |
| import { db } from "@/lib/db"; | |
| import fs from "fs/promises"; | |
| import path from "path"; | |
| const REPOS_DIR = path.join(process.cwd(), "repos"); | |
| // GET - Obtener detalles de un repositorio específico | |
| export async function GET( | |
| request: NextRequest, | |
| { params }: { params: Promise<{ id: string }> } | |
| ) { | |
| try { | |
| const { id } = await params; | |
| const repo = await db.repo.findUnique({ | |
| where: { id }, | |
| include: { | |
| project: true, | |
| analyses: true, | |
| }, | |
| }); | |
| if (!repo) { | |
| return NextResponse.json( | |
| { success: false, error: "Repositorio no encontrado" }, | |
| { status: 404 } | |
| ); | |
| } | |
| // Leer estructura de archivos del repo | |
| const repoPath = path.join(REPOS_DIR, repo.name); | |
| let files: string[] = []; | |
| let readme = null; | |
| try { | |
| const entries = await fs.readdir(repoPath, { withFileTypes: true }); | |
| files = entries.map((e) => e.name); | |
| // Intentar leer README | |
| try { | |
| const readmePath = path.join(repoPath, "README.md"); | |
| readme = await fs.readFile(readmePath, "utf-8"); | |
| } catch { | |
| // No hay README | |
| } | |
| } catch { | |
| // Directorio no accesible | |
| } | |
| return NextResponse.json({ | |
| success: true, | |
| repo, | |
| files, | |
| readme, | |
| }); | |
| } catch (error) { | |
| console.error("Error fetching repo:", error); | |
| return NextResponse.json( | |
| { success: false, error: "Error al obtener repositorio" }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |
| // DELETE - Eliminar un repositorio | |
| export async function DELETE( | |
| request: NextRequest, | |
| { params }: { params: Promise<{ id: string }> } | |
| ) { | |
| try { | |
| const { id } = await params; | |
| const repo = await db.repo.findUnique({ | |
| where: { id }, | |
| }); | |
| if (!repo) { | |
| return NextResponse.json( | |
| { success: false, error: "Repositorio no encontrado" }, | |
| { status: 404 } | |
| ); | |
| } | |
| // Eliminar directorio del repositorio | |
| const repoPath = path.join(REPOS_DIR, repo.name); | |
| try { | |
| await fs.rm(repoPath, { recursive: true, force: true }); | |
| } catch { | |
| // Directorio no existe | |
| } | |
| // Eliminar análisis relacionados | |
| await db.analysis.deleteMany({ | |
| where: { repoId: id }, | |
| }); | |
| // Eliminar de base de datos | |
| await db.repo.delete({ | |
| where: { id }, | |
| }); | |
| return NextResponse.json({ | |
| success: true, | |
| message: `Repositorio ${repo.name} eliminado`, | |
| }); | |
| } catch (error) { | |
| console.error("Error deleting repo:", error); | |
| return NextResponse.json( | |
| { success: false, error: "Error al eliminar repositorio" }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |