🔧 FIX: korrekte POST Route mit Pydantic Schema für /api/subscribe
docker-build-and-push / build (push) Successful in 17s

This commit is contained in:
KI-Sparringpartner
2026-08-03 14:47:17 +02:00
parent cfddef5e56
commit 647abba96b
+27 -26
View File
@@ -1,41 +1,42 @@
import httpx import httpx
from pathlib import Path from pathlib import Path
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, HTTPException
from .git_manager import clone_repo, push_changes from pydantic import BaseModel
from .git_manager import clone_repo
from .changelog_gen import generate_changelog from .changelog_gen import generate_changelog
router = APIRouter() router = APIRouter()
@router.get("/health") class SubscribeRequest(BaseModel):
async def health_check(): """Schema für Subscription Request"""
return {"status": "ok"} repo_url: str
target_name: str = "imported-repo"
token_provided: str | None = None
def get_token_or_default(): @router.post("/subscribe")
"""Sichert Token oder wirft Fehler.""" async def subscribe_repo(req: SubscribeRequest):
from .main import ACCESS_TOKEN """Abonniert und klont ein Repository."""
if not ACCESS_TOKEN: from .main import get_token, ACCESS_TOKEN
raise HTTPException(status_code=503, detail="ACCESS_TOKEN nicht gesetzt")
return ACCESS_TOKEN
# Nutze übergebener Token oder Standard
effective_token = req.token_provided or ACCESS_TOKEN or ""
@router.get("/repos") if not effective_token:
async def list_repos(): raise HTTPException(status_code=401, detail="Kein TOKEN vorhanden!")
"""Listet Repositories von Gitea auf."""
from .main import GITEE_URL, get_token
token = get_token()
if not token: target_dir = Path("/projects") / req.target_name
# Debug-Info!
return {"error": "Kein Token vorhanden!", "hint": "Setze ACCESS_TOKEN Umgebungsvariable"}
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: generate_changelog(target_dir)
resp = await client.get(url, headers=headers)
if resp.status_code != 200: return {
return {"error": resp.text[:500]} # Fehlermeldung zurückgeben "message": f"{req.target_name} geklont!",
return resp.json() "path": str(target_dir),
"success": True
}