Convert backend from submodule to regular directory
Some checks failed
Deploy to NAS / deploy (push) Failing after 4s
Some checks failed
Deploy to NAS / deploy (push) Failing after 4s
Remove submodule tracking; backend is now a plain directory in the repo. Also update deploy workflow: remove --recurse-submodules. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
109
backend/CLAUDE.md
Normal file
109
backend/CLAUDE.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# CLAUDE.md — Pamietnik Backend (Go Server)
|
||||
|
||||
## Stack
|
||||
|
||||
Language: Go
|
||||
DB: PostgreSQL
|
||||
API-Doc: OpenAPI 3.1 (openapi.yaml)
|
||||
Auth: Session Cookie (Web UI); API-Key oder JWT (Android Upload, TBD)
|
||||
Hashing: Argon2id (Passwörter)
|
||||
Geocoding: Nominatim (OSM) mit Cache + Rate-Limit; Provider austauschbar
|
||||
Maps: OpenStreetMap Tiles (konfigurierbar, serverseitig)
|
||||
Dev: docker-compose (API + PostgreSQL)
|
||||
|
||||
---
|
||||
|
||||
## Kern-Features (Backend)
|
||||
|
||||
1. REST API Ingest: Single + Batch Trackpoints (Idempotenz via event_id)
|
||||
2. Idempotenz/Dedupe: Unique Key (device_id, event_id); Duplikate = 200 OK
|
||||
3. Stop Detection: Aufenthalte erkennen (minDuration + radiusMeters konfigurierbar)
|
||||
4. Suggestions: Aus Stops Vorschläge ableiten + speichern
|
||||
5. Reverse-Geocoding: Nominatim gecached, Provider austauschbar via Config
|
||||
6. Web UI: Login (Session Cookie), Tagesübersicht, Tagesdetail, Karte
|
||||
7. Auth: Argon2id Passwort-Hashing, Session-Store in PostgreSQL
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
Ingest:
|
||||
POST /v1/trackpoints <- Single Trackpoint
|
||||
POST /v1/trackpoints:batch <- Batch Trackpoints
|
||||
GET /healthz
|
||||
GET /readyz
|
||||
|
||||
Query (Auth required):
|
||||
GET /v1/days?from=YYYY-MM-DD&to=YYYY-MM-DD
|
||||
GET /v1/trackpoints?date=YYYY-MM-DD
|
||||
GET /v1/stops?date=YYYY-MM-DD
|
||||
GET /v1/suggestions?date=YYYY-MM-DD
|
||||
|
||||
Web UI (Session Cookie, serverseitig gerendert):
|
||||
GET /login
|
||||
POST /login
|
||||
POST /logout
|
||||
GET /days
|
||||
GET /days/{yyyy-mm-dd}
|
||||
|
||||
---
|
||||
|
||||
## Datenmodell (Kern)
|
||||
|
||||
Trackpoint:
|
||||
event_id string (UUID, client-generated)
|
||||
device_id string
|
||||
trip_id string
|
||||
timestamp RFC3339 oder epochMillis (TBD)
|
||||
lat, lon float64
|
||||
source "gps" | "manual"
|
||||
note string (optional)
|
||||
|
||||
Stop:
|
||||
stop_id string
|
||||
device_id, trip_id
|
||||
start_ts, end_ts
|
||||
center_lat, center_lon
|
||||
duration_s int
|
||||
place_label string (optional, Nominatim)
|
||||
|
||||
Suggestion:
|
||||
suggestion_id
|
||||
stop_id
|
||||
type "highlight" | "name_place" | "add_note"
|
||||
title/text string
|
||||
created_at, dismissed_at
|
||||
|
||||
---
|
||||
|
||||
## Architektur-Prinzipien
|
||||
|
||||
- Idempotenz zuerst: Kein Duplicate Insert, immer event_id prüfen
|
||||
- Geocoding nur ereignisbasiert (pro Stop), niemals periodisch/bulk
|
||||
- Geocoding-Provider über Config austauschbar (kein Hardcode)
|
||||
- Sessions serverseitig in PostgreSQL (invalidierbar bei Logout)
|
||||
- Stop Detection Parameter (minDuration, radiusMeters) konfigurierbar
|
||||
- OpenAPI immer aktuell halten; Änderungen nur via PR + CI Validation
|
||||
|
||||
---
|
||||
|
||||
## Offene Entscheidungen (TBD)
|
||||
|
||||
- timestamp Format: epochMillis vs RFC3339
|
||||
- Android Upload Auth: X-API-Key vs JWT
|
||||
- Payload: JSON vs Protobuf
|
||||
- Batch limits (max items, max bytes)
|
||||
- Retention Policy (Trackpoints löschen nach X Tagen)
|
||||
- Stop-Detection Parameter (Mindestdauer, Radius)
|
||||
- Geocoding Provider: Nominatim public vs self-hosted vs Alternative
|
||||
|
||||
---
|
||||
|
||||
## Nächste Tasks (Reihenfolge)
|
||||
|
||||
- [ ] T024 REST API finalisieren (Endpoints, Fehlerformat, Limits)
|
||||
- [ ] T027 PostgreSQL Schema + Migrationen + Indizes
|
||||
- [ ] T028 Idempotenz implementieren (unique event_id pro device)
|
||||
- [ ] T029 Observability (Logs/Metrics), Health/Ready
|
||||
- [ ] T030 docker-compose lokal (API + PostgreSQL) + Minimal-Client
|
||||
- [ ] T050 Auth-Konzept festlegen
|
||||
Reference in New Issue
Block a user