Files
gitea-sync-ai/app/routes.py
T
putschgi 806b912403
docker-build-and-push / build (push) Successful in 18s
app/routes.py aktualisiert
2026-08-03 15:10:49 +02:00

54 lines
1.7 KiB
Python

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()