diff --git a/app/routes.py b/app/routes.py index 495dde1..02dee0d 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,41 +1,42 @@ import httpx from pathlib import Path -from fastapi import APIRouter, Depends, HTTPException -from .git_manager import clone_repo, push_changes +from fastapi import APIRouter, HTTPException +from pydantic import BaseModel +from .git_manager import clone_repo from .changelog_gen import generate_changelog router = APIRouter() -@router.get("/health") -async def health_check(): - return {"status": "ok"} +class SubscribeRequest(BaseModel): + """Schema für Subscription Request""" + repo_url: str + target_name: str = "imported-repo" + token_provided: str | None = None -def get_token_or_default(): - """Sichert Token oder wirft Fehler.""" - from .main import ACCESS_TOKEN - if not ACCESS_TOKEN: - raise HTTPException(status_code=503, detail="ACCESS_TOKEN nicht gesetzt") - return ACCESS_TOKEN +@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 Standard + effective_token = req.token_provided or ACCESS_TOKEN or "" -@router.get("/repos") -async def list_repos(): - """Listet Repositories von Gitea auf.""" - from .main import GITEE_URL, get_token - token = get_token() + if not effective_token: + raise HTTPException(status_code=401, detail="Kein TOKEN vorhanden!") - if not token: - # Debug-Info! - return {"error": "Kein Token vorhanden!", "hint": "Setze ACCESS_TOKEN Umgebungsvariable"} + target_dir = Path("/projects") / req.target_name - url = f"{GITEE_URL.rstrip('/')}/api/v1/user/repos" + result = clone_repo(req.repo_url, target_dir, token=effective_token) - headers = {"Authorization": f"token {token}"} + if not result["success"]: + return {"error": result.get("error"), "success": False} - async with httpx.AsyncClient() as client: - resp = await client.get(url, headers=headers) - if resp.status_code != 200: - return {"error": resp.text[:500]} # Fehlermeldung zurückgeben - return resp.json() \ No newline at end of file + generate_changelog(target_dir) + + return { + "message": f"✅ {req.target_name} geklont!", + "path": str(target_dir), + "success": True + } \ No newline at end of file