refactor: Backend auf Go + net/http + pgx umgestellt, kein Framework

This commit is contained in:
2026-04-28 09:43:01 +00:00
parent 500a655f20
commit 5b84cf7d9b

View File

@@ -24,7 +24,7 @@ Jedes Repository, das auf dieser Gitea-Instanz mit dem Topic-Tag `dashboard` ver
```
┌─────────────────┐ Gitea REST API v1 ┌──────────────────────┐
│ Gitea Server │ ◄────────────────────────► │ Backend Service │
│ (Repos + Topics)│ │ (Bun + Hono)
│ (Repos + Topics)│ │ (Go, net/http)
└─────────────────┘ └──────────┬───────────┘
┌──────────▼───────────┐
@@ -46,7 +46,7 @@ Jedes Repository, das auf dieser Gitea-Instanz mit dem Topic-Tag `dashboard` ver
**Warum SvelteKit?**
- Leichtgewichtig und schnell ideal für ein internes Dashboard
- Server-Side Rendering (SSR) out of the box kein Flackern beim Laden
- Einfache Reaktivität ohne overhead
- Einfache Reaktivität ohne Overhead
- Perfekt für datengetriebene Dashboards mit Echtzeit-Updates via SSE oder WebSocket
**Features im Frontend:**
@@ -58,21 +58,37 @@ Jedes Repository, das auf dieser Gitea-Instanz mit dem Topic-Tag `dashboard` ver
---
## ⚙️ Backend: **Bun + Hono**
## ⚙️ Backend: **Go (net/http + pgx)**
**Warum Bun + Hono?**
- Bun ist deutlich schneller als Node.js geringere Latenz bei API-Polling
- Hono ist ein ultraleichtes Web-Framework, ideal für REST APIs
- Nativer TypeScript-Support ohne Konfigurationsaufwand
- Eingebauter Cron-Job-Support für regelmäßiges Gitea-Polling
Go eignet sich hervorragend als Backend-Sprache die Standardbibliothek ist so vollständig, dass kein Web-Framework nötig ist. `net/http` liefert alles was gebraucht wird: Routing, Handler, Middleware. Das Ergebnis ist eine dependency-arme, gut lesbare Codebasis.
**Warum kein Framework?**
- `net/http` aus der Standardbibliothek reicht für ~6 Endpoints vollständig aus
- Kein Framework-Overhead, keine Breaking Changes durch externe Dependencies
- Go-typischer Ansatz: explizit, simpel, lesbar
- Kompiliert zu einer einzigen statischen Binary minimaler Docker-Footprint
**Externe Dependencies (minimal):**
- `pgx` PostgreSQL-Treiber (direktes SQL, kein ORM)
- `godotenv` `.env`-Datei laden
**Backend-Aufgaben:**
- `GET /api/projects` alle getaggten Repos aus der DB zurückgeben
- `POST /api/webhook` Gitea Webhook-Listener für Push, Issue, Tag-Events
- `GET /api/projects/:id/issues` Issues eines Repos live aus Gitea holen
- Hintergrund-Job: alle 5 Minuten Gitea API nach Repos mit Tag `dashboard` abfragen
- `GET /api/projects/{id}/issues` Issues eines Repos live aus Gitea holen
- Hintergrund-Goroutine: alle 5 Minuten Gitea API nach Repos mit Tag `dashboard` abfragen
- Repo-Daten in PostgreSQL cachen (inkl. Topics, letzter Aktivität, Issue-Count)
**Beispiel HTTP-Server ohne Framework:**
```go
mux := http.NewServeMux()
mux.HandleFunc("GET /api/projects", h.listProjects)
mux.HandleFunc("POST /api/webhook", h.handleWebhook)
mux.HandleFunc("GET /api/projects/{id}/issues", h.listIssues)
log.Fatal(http.ListenAndServe(":8080", mux))
```
---
## 🗄️ Datenbank: **PostgreSQL**
@@ -132,13 +148,13 @@ CREATE TABLE webhook_events (
## 🔧 Tech Stack
| Schicht | Technologie |
|------------|--------------------------|
| Frontend | SvelteKit + TailwindCSS |
| Backend | Bun + Hono (TypeScript) |
| Datenbank | PostgreSQL + Drizzle ORM |
| API | Gitea REST API v1 |
| Deployment | Docker Compose |
| Schicht | Technologie |
|------------|------------------------------|
| Frontend | SvelteKit + TailwindCSS |
| Backend | Go + net/http (Standardlib) |
| Datenbank | PostgreSQL + pgx |
| API | Gitea REST API v1 |
| Deployment | Docker Compose |
---