diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..fafd71d --- /dev/null +++ b/CHANGELOG.md @@ -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* diff --git a/app/routes.py b/app/routes.py index 9dc0a26..8334bbd 100644 --- a/app/routes.py +++ b/app/routes.py @@ -2,8 +2,6 @@ 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() @@ -15,12 +13,55 @@ class SubscribeRequest(BaseModel): 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): """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 "" if not effective_token: @@ -33,22 +74,19 @@ async def subscribe_repo(req: SubscribeRequest): if not result["success"]: return {"error": result.get("error"), "success": False} + # Marker für Changes erstellen + (target_dir / ".gitea-changes.marker").touch() + 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 + "token_used": bool(effective_token and not req.token_provided) } -@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() \ No newline at end of file + +# Importiere hier damit die Funktionen verfügbar sind! +from .git_manager import clone_repo +from .changelog_gen import generate_changelog \ No newline at end of file diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 index ba9d0b1..11ceae3 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ fastapi==0.115.12 uvicorn[standard]==0.30.6 httpx==0.27.2 -watchdog==4.0.2 \ No newline at end of file +watchdog==4.0.2