System Servertjenester - aTrueYety/idatt2106-2025-09-backend GitHub Wiki
Denne siden dokumenterer API- og WebSocket-tjenestene som systemet eksponerer.
Alle REST-endepunkter følger RESTful-prinsipper og er dokumentert via Swagger (Springdoc OpenAPI).
Swagger UI: http://localhost:8080/swagger-ui/index.html
OpenAPI JSON: http://localhost:8080/v3/api-docs
-
Autentisering:
/api/auth/*
-
Husholdninger og grupper:
/api/households/*
,/api/group-households/*
-
Kartobjekter og typer:
/api/map-object/*
,/api/map-object-type/*
-
Nødgrupper og hendelser:
/api/emergency-groups/*
,/api/events/*
-
Brukere og posisjonsdeling:
/api/user/*
,/api/location/*
-
Matsystem:
/api/food/*
,/api/shared-food/*
,/api/food-types/*
,/api/kits/*
-
Ekstra husholdningsmedlemmer:
/api/extra-residents/*
,/api/extra-resident-types/*
-
Informasjonssider:
/api/info-page/*
- Alle brukere autentiseres med JWT-token
- Token sendes i
Authorization: Bearer <token>
header - Ugyldige tokens gir
401 Unauthorized
- Spring Security brukes til tilgangsstyring
Systemet bruker WebSocket (STOMP med SockJS fallback) for sanntidstjenester:
- Endepunkt:
/ws
- Prefix:
/app
- Broker:
/topic
- JWT-token sendes som query-param:
/ws?token=<jwt>
- Token valideres i
WebSocketAuthHandshakeInterceptor
Sekvensdiagram av ws oppkobling mot posisjonsdelingsendepunktet:
Brukerens posisjon deles med husholdningen dersom sharePositionHousehold == true
.
- Topic:
/topic/location/{householdId}
- Payload:
LocationUpdate { userId, latitude, longitude }
- Sendes fra backend via
LocationBroadcastService
- Brukes til å vise og synkronisere objekter i kartet
- Endringer kringkastes på:
/topic/map-object/all
Payload-format:
{
"event": "created|updated|deleted",
"payload": { ... } // MapObjectRequest eller MapObjectResponse
}
- Hendelser knyttet til kart eller nødsituasjoner sendes på:
/topic/events
- Format som
WebSocketEvent<EventRequest|EventResponse>
{
"event": "updated",
"payload": {
"latitude": 63.41,
"longitude": 10.42,
"userId": 3
}
}
Klient ── (send REST) ──> /api/location/update
Backend validerer + prosesserer
Backend ── ( send WS ) ──> /topic/location/{householdId}
Sekvensdiagram:
- Meldingsklasser:
WebSocketEvent<T>
- Alle WebSocket-tjenester bruker
SimpMessagingTemplate
- Debugging: logger info hvis posisjon ikke sendes