Entwicklung
Voraussetzungen
| Werkzeug |
Version |
Pflicht |
| Go |
1.23+ |
Ja |
| FFmpeg |
Aktuell |
Optional (für Aufnahmen & Video-Proxy) |
| Docker |
Aktuell |
Für Container-Build |
| Make |
Aktuell |
Für Build-Automatisierung |
Projekt einrichten
Makefile-Targets
| Target |
Beschreibung |
make build |
Go-Binary kompilieren |
make run |
Bauen und lokal ausführen |
make deps |
Abhängigkeiten herunterladen |
make test |
Unit-Tests ausführen |
make lint |
Code-Analyse mit golangci-lint |
make clean |
Binary entfernen, Datenbank zurücksetzen |
make docker |
Docker-Image bauen |
make docker-run |
Container mit docker-compose starten |
make docker-stop |
Container stoppen |
make docker-logs |
Container-Logs verfolgen |
make db-reset |
Datenbank löschen und neu erstellen |
Lokal starten
Die Anwendung ist standardmäßig unter http://localhost:8080 erreichbar.
Tests ausführen
Vorhandene Tests
| Paket |
Datei |
Beschreibung |
internal/auth |
auth_test.go |
JWT-Generierung, Passwort-Hashing |
internal/db |
db_test.go |
Datenbankoperationen, Schema |
internal/recorder |
recorder_test.go |
Aufnahme-Logik |
Code-Analyse
Docker-Image lokal bauen
Projektstruktur-Konventionen
Go-Code
cmd/ – Einstiegspunkte (main-Packages)
internal/ – Interne Pakete (nicht von außen importierbar)
- Ein Paket pro Verantwortungsbereich
models/ enthält nur Datenstrukturen, keine Logik
api/ enthält Handler und Router
- Keine globalen Variablen – Dependency Injection über Structs
Frontend
- Kein Build-Step – Vanilla JS + Alpine.js (direkt auslieferbar)
- Single Page Application – Eine
index.html, Routing über Alpine.js State
- CSS-Variablen – Design-Tokens in
:root
Datenbank
- Schema-Migration – Automatisch beim Start (
db.go)
- Parametrisierte Queries – Kein String-Concatenation
- Benannte Queries –
sqlx Tags in Structs
Neue Funktionen hinzufügen
Neuen API-Endpunkt
- Model definieren in
internal/models/models.go
- Query schreiben in
internal/db/queries.go
- Handler erstellen in
internal/api/handlers.go
- Route registrieren in
internal/api/router.go
- Frontend anbinden in
web/static/js/app.js
Neue Integration
- Client-Paket erstellen unter
internal/{integration}/
- Konfiguration in
internal/config/config.go ergänzen
- API-Endpunkte hinzufügen
- Benutzer-Einstellungen in der DB erweitern (Schema-Migration)
Deployment-Workflow
Abhängigkeiten (go.mod)
Direkte Abhängigkeiten
| Modul |
Zweck |
github.com/go-chi/chi/v5 |
HTTP-Router |
github.com/go-chi/cors |
CORS-Middleware |
github.com/golang-jwt/jwt/v5 |
JWT-Authentifizierung |
github.com/jmoiron/sqlx |
SQL-Datenbank-Wrapper |
github.com/robfig/cron/v3 |
Cron-Scheduler |
golang.org/x/crypto |
bcrypt Passwort-Hashing |
modernc.org/sqlite |
Pure-Go SQLite-Treiber |
Wichtige Charakteristiken
- Kein CGO – Reine Go-Kompilierung, maximale Portabilität
- Minimale Abhängigkeiten – Leichtgewichtiger Dependency-Tree
- Keine ORM – Direkte SQL-Queries via sqlx
Zurück zur Dokumentationsübersicht