refactor: Backend auf Go + net/http + pgx umgestellt, kein Framework
This commit is contained in:
42
README.md
42
README.md
@@ -24,7 +24,7 @@ Jedes Repository, das auf dieser Gitea-Instanz mit dem Topic-Tag `dashboard` ver
|
|||||||
```
|
```
|
||||||
┌─────────────────┐ Gitea REST API v1 ┌──────────────────────┐
|
┌─────────────────┐ Gitea REST API v1 ┌──────────────────────┐
|
||||||
│ Gitea Server │ ◄────────────────────────► │ Backend Service │
|
│ 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?**
|
**Warum SvelteKit?**
|
||||||
- Leichtgewichtig und schnell – ideal für ein internes Dashboard
|
- Leichtgewichtig und schnell – ideal für ein internes Dashboard
|
||||||
- Server-Side Rendering (SSR) out of the box – kein Flackern beim Laden
|
- 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
|
- Perfekt für datengetriebene Dashboards mit Echtzeit-Updates via SSE oder WebSocket
|
||||||
|
|
||||||
**Features im Frontend:**
|
**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?**
|
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.
|
||||||
- Bun ist deutlich schneller als Node.js – geringere Latenz bei API-Polling
|
|
||||||
- Hono ist ein ultraleichtes Web-Framework, ideal für REST APIs
|
**Warum kein Framework?**
|
||||||
- Nativer TypeScript-Support ohne Konfigurationsaufwand
|
- `net/http` aus der Standardbibliothek reicht für ~6 Endpoints vollständig aus
|
||||||
- Eingebauter Cron-Job-Support für regelmäßiges Gitea-Polling
|
- 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:**
|
**Backend-Aufgaben:**
|
||||||
- `GET /api/projects` – alle getaggten Repos aus der DB zurückgeben
|
- `GET /api/projects` – alle getaggten Repos aus der DB zurückgeben
|
||||||
- `POST /api/webhook` – Gitea Webhook-Listener für Push, Issue, Tag-Events
|
- `POST /api/webhook` – Gitea Webhook-Listener für Push, Issue, Tag-Events
|
||||||
- `GET /api/projects/:id/issues` – Issues eines Repos live aus Gitea holen
|
- `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
|
- 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)
|
- 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**
|
## 🗄️ Datenbank: **PostgreSQL**
|
||||||
@@ -133,10 +149,10 @@ CREATE TABLE webhook_events (
|
|||||||
## 🔧 Tech Stack
|
## 🔧 Tech Stack
|
||||||
|
|
||||||
| Schicht | Technologie |
|
| Schicht | Technologie |
|
||||||
|------------|--------------------------|
|
|------------|------------------------------|
|
||||||
| Frontend | SvelteKit + TailwindCSS |
|
| Frontend | SvelteKit + TailwindCSS |
|
||||||
| Backend | Bun + Hono (TypeScript) |
|
| Backend | Go + net/http (Standardlib) |
|
||||||
| Datenbank | PostgreSQL + Drizzle ORM |
|
| Datenbank | PostgreSQL + pgx |
|
||||||
| API | Gitea REST API v1 |
|
| API | Gitea REST API v1 |
|
||||||
| Deployment | Docker Compose |
|
| Deployment | Docker Compose |
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user