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 } ); } }