import httpx from pathlib import Path from fastapi import APIRouter, HTTPException from pydantic import BaseModel from .git_manager import clone_repo from .changelog_gen import generate_changelog router = APIRouter() class SubscribeRequest(BaseModel): """Schema für Subscription Request""" repo_url: str target_name: str = "imported-repo" token_provided: str | None = None @router.post("/subscribe") async def subscribe_repo(req: SubscribeRequest): """Abonniert und klont ein Repository.""" from .main import get_token, ACCESS_TOKEN # Nutze übergebener Token ODER lokale Umgebungsvariable ODER Standard-Token aus main.py 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} 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) # Zeigt ob Token vom System oder User kommt } @router.get("/repos") #✅ Diese muss existieren für /api/repos! async def list_repos(): from .main import GITEE_URL, get_token token = get_token() headers = {"Authorization": f"token {token}"} if token else {} async with httpx.AsyncClient() as client: resp = await client.get(f"{GITEE_URL}/api/v1/user/repos", headers=headers) return resp.json() @router.get("/repos/{repo_id}/status") async def get_repo_status(repo_id: int): import os # Prüfe ob Ordner existiert return {"subscribed": os.path.exists(f"/projects/repo-{repo_id}")} ```[1] Für Datei-Änderungen brauchst du a `watchdog` Observer, der Änderungs-Hashes speichert [1]. Möchtest du die Implementierung direkt erledigen lassen?