🔥 TOTAL FIX: /projects Route + korrekte Token-Logik
docker-build-and-push / build (push) Successful in 46s
docker-build-and-push / build (push) Successful in 46s
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user