import httpx from pathlib import Path from fastapi import APIRouter, HTTPException from pydantic import BaseModel router = APIRouter() class SubscribeRequest(BaseModel): """Schema für Subscription Request""" repo_url: str target_name: str = "imported-repo" token_provided: str | None = None @router.get("/projects") #✅ NEU: Listet abonierte Projekte! async def list_projects(): """Listet lokale (abonierte) Projekte an.""" from .main import PROJECTS_DIR, get_token, ACCESS_TOKEN projects = [] if PROJECTS_DIR.exists() and str(PROJECTS_DIR).strip(): for project_dir in sorted(PROJECTS_DIR.iterdir()): if project_dir.is_dir() and not project_dir.name.startswith('.'): # Prüfe ob es ein Git-Repo ist has_git = (project_dir / '.git').exists() # Prüfe auf unentdeckte Changes changes_marker = project_dir /'.gitea-changes.marker' has_changes = changes_marker.exists() projects.append({ "name": project_dir.name, "path": str(project_dir), "subscribed": True, "has_git": bool(has_git), "has_undiscovered_changes": has_changes }) return {"projects": projects} @router.get("/repos") #✅ VORHANDEN: Listet Gitea-Repos! async def list_repos(): """Listet Repositories von Gitea auf.""" from .main import GITEE_URL, ACCESS_TOKEN token = ACCESS_TOKEN or "" #✅ Direkter Zugriff! if not token: return {"error": "Kein Token vorhanden!", "hint": "Setze ACCESS_TOKEN Umgebungsvariable"} headers = {"Authorization": f"token {token}"} async with httpx.AsyncClient() as client: resp = await client.get(f"{GITEE_URL}/api/v1/user/repos", headers=headers) return resp.json() @router.post("/subscribe") #✅ VORHANDEN: Clont Repo! async def subscribe_repo(req: SubscribeRequest): """Abonniert und klont ein Repository.""" from .main import ACCESS_TOKEN effective_token = req.token_provided or ACCESS_TOKEN or "" if not effective_token: raise HTTPException(status_code=401, detail="Kein TOKEN vorhanden! Bitte setze ACCESS_TOKEN Umgebungsvariable.") target_dir = Path("/projects") / req.target_name result = clone_repo(req.repo_url, target_dir, token=effective_token) if not result["success"]: return {"error": result.get("error"), "success": False} # Marker für Changes erstellen (target_dir / ".gitea-changes.marker").touch() generate_changelog(target_dir) return { "message": f"✅ {req.target_name} geklont!", "path": str(target_dir), "success": True, "token_used": bool(effective_token and not req.token_provided) } # Importiere hier damit die Funktionen verfügbar sind! from .git_manager import clone_repo from .changelog_gen import generate_changelog