53 lines
1.5 KiB
Python
53 lines
1.5 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 Standard
|
|
effective_token = req.token_provided or ACCESS_TOKEN or ""
|
|
|
|
if not effective_token:
|
|
raise HTTPException(status_code=401, detail="Kein TOKEN vorhanden!")
|
|
|
|
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
|
|
}
|
|
|
|
@router.get("/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() |