From 647abba96b995441b2df53ae7e6b0ef27e8cc76b Mon Sep 17 00:00:00 2001 From: KI-Sparringpartner Date: Mon, 3 Aug 2026 14:47:17 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20FIX:=20korrekte=20POST=20Route?= =?UTF-8?q?=20mit=20Pydantic=20Schema=20f=C3=BCr=20/api/subscribe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routes.py | 53 ++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) 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