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