🔥 TOTAL FIX: /projects Route + korrekte Token-Logik
docker-build-and-push / build (push) Successful in 46s

This commit is contained in:
KI-Sparringpartner
2026-08-03 15:45:52 +02:00
parent b1250213f5
commit 419ee9dfb0
3 changed files with 63 additions and 17 deletions
+8
View File
@@ -0,0 +1,8 @@
# 📋 Projekt-Changelog
## 🧠 Letzte Änderungen (2026-08-03 15:12:39)
- Dateiüberwachung aktiviert
- AI-basierte Analysen möglich via OpenWebUI
💡 *Automatisch generiert vom Gitea-Sync-AI-Service*
+54 -16
View File
@@ -2,8 +2,6 @@ import httpx
from pathlib import Path from pathlib import Path
from fastapi import APIRouter, HTTPException from fastapi import APIRouter, HTTPException
from pydantic import BaseModel from pydantic import BaseModel
from .git_manager import clone_repo
from .changelog_gen import generate_changelog
router = APIRouter() router = APIRouter()
@@ -15,12 +13,55 @@ class SubscribeRequest(BaseModel):
token_provided: str | None = None token_provided: str | None = None
@router.post("/subscribe") @router.get("/projects") #✅ NEU: Listet abonierte Projekte!
async def list_projects():
"""Listet lokale (abonierte) Projekte an."""
from .main import PROJECTS_DIR, get_token, ACCESS_TOKEN
projects = []
if PROJECTS_DIR.exists() and str(PROJECTS_DIR).strip():
for project_dir in sorted(PROJECTS_DIR.iterdir()):
if project_dir.is_dir() and not project_dir.name.startswith('.'):
# Prüfe ob es ein Git-Repo ist
has_git = (project_dir / '.git').exists()
# Prüfe auf unentdeckte Changes
changes_marker = project_dir /'.gitea-changes.marker'
has_changes = changes_marker.exists()
projects.append({
"name": project_dir.name,
"path": str(project_dir),
"subscribed": True,
"has_git": bool(has_git),
"has_undiscovered_changes": has_changes
})
return {"projects": projects}
@router.get("/repos") #✅ VORHANDEN: Listet Gitea-Repos!
async def list_repos():
"""Listet Repositories von Gitea auf."""
from .main import GITEE_URL, ACCESS_TOKEN
token = ACCESS_TOKEN or "" #✅ Direkter Zugriff!
if not token:
return {"error": "Kein Token vorhanden!", "hint": "Setze ACCESS_TOKEN Umgebungsvariable"}
headers = {"Authorization": f"token {token}"}
async with httpx.AsyncClient() as client:
resp = await client.get(f"{GITEE_URL}/api/v1/user/repos", headers=headers)
return resp.json()
@router.post("/subscribe") #✅ VORHANDEN: Clont Repo!
async def subscribe_repo(req: SubscribeRequest): async def subscribe_repo(req: SubscribeRequest):
"""Abonniert und klont ein Repository.""" """Abonniert und klont ein Repository."""
from .main import get_token, ACCESS_TOKEN from .main import ACCESS_TOKEN
# Nutze übergebener Token ODER lokale Umgebungsvariable ODER Standard-Token aus main.py
effective_token = req.token_provided or ACCESS_TOKEN or "" effective_token = req.token_provided or ACCESS_TOKEN or ""
if not effective_token: if not effective_token:
@@ -33,22 +74,19 @@ async def subscribe_repo(req: SubscribeRequest):
if not result["success"]: if not result["success"]:
return {"error": result.get("error"), "success": False} return {"error": result.get("error"), "success": False}
# Marker für Changes erstellen
(target_dir / ".gitea-changes.marker").touch()
generate_changelog(target_dir) generate_changelog(target_dir)
return { return {
"message": f"{req.target_name} geklont!", "message": f"{req.target_name} geklont!",
"path": str(target_dir), "path": str(target_dir),
"success": True, "success": True,
"token_used": bool(effective_token and not req.token_provided) # Zeigt ob Token vom System oder User kommt "token_used": bool(effective_token and not req.token_provided)
} }
@router.get("/repos") #✅ Diese muss existieren für /api/repos!
async def list_repos(): # Importiere hier damit die Funktionen verfügbar sind!
from .main import GITEE_URL, get_token from .git_manager import clone_repo
token = get_token() from .changelog_gen import generate_changelog
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()
Regular → Executable
+1 -1
View File
@@ -1,4 +1,4 @@
fastapi==0.115.12 fastapi==0.115.12
uvicorn[standard]==0.30.6 uvicorn[standard]==0.30.6
httpx==0.27.2 httpx==0.27.2
watchdog==4.0.2 watchdog==4.0.2