Spaces:
Build error
Build error
File size: 2,694 Bytes
333c51a | 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 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 }
);
}
}
|