🔧 FIX: korrekte POST Route mit Pydantic Schema für /api/subscribe
docker-build-and-push / build (push) Successful in 17s
docker-build-and-push / build (push) Successful in 17s
This commit is contained in:
+27
-26
@@ -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()
|
||||
generate_changelog(target_dir)
|
||||
|
||||
return {
|
||||
"message": f"✅ {req.target_name} geklont!",
|
||||
"path": str(target_dir),
|
||||
"success": True
|
||||
}
|
||||
Reference in New Issue
Block a user