Servertjenester - aTrueYety/idatt2106-2025-09-backend GitHub Wiki

Servertjenester

Denne siden dokumenterer API- og WebSocket-tjenestene som systemet eksponerer.


REST API

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

API-hovedområder:

  • 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/*

Autentisering og sikkerhet

  • Alle brukere autentiseres med JWT-token
  • Token sendes i Authorization: Bearer <token> header
  • Ugyldige tokens gir 401 Unauthorized
  • Spring Security brukes til tilgangsstyring

WebSocket-tjenester

Systemet bruker WebSocket (STOMP med SockJS fallback) for sanntidstjenester:

Konfigurasjon

  • Endepunkt: /ws
  • Prefix: /app
  • Broker: /topic

Autentisering

  • JWT-token sendes som query-param: /ws?token=<jwt>
  • Token valideres i WebSocketAuthHandshakeInterceptor
  • Les mer under Sikkerhet

Posisjonsdeling

Brukerens posisjon deles med husholdningen dersom sharePositionHousehold == true.

  • Topic: /topic/location/{householdId}
  • Payload: LocationUpdate { userId, latitude, longitude }
  • Sendes fra backend via LocationBroadcastService

Kartobjekter

  • 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 (Events)

  • Hendelser knyttet til kart eller nødsituasjoner sendes på: /topic/events
  • Format som WebSocketEvent<EventRequest|EventResponse>

Eksempel på WebSocket-melding

{
  "event": "updated",
  "payload": {
    "latitude": 63.41,
    "longitude": 10.42,
    "userId": 3
  }
}

Meldingsflyt

Klient  ── (send REST) ──>  /api/location/update
                     Backend validerer + prosesserer
Backend ── ( send WS ) ──>  /topic/location/{householdId}

Sekvensdiagram:

sekvensdiagram-ws-meldingsflyt


Merknader

  • Meldingsklasser: WebSocketEvent<T>
  • Alle WebSocket-tjenester bruker SimpMessagingTemplate
  • Debugging: logger info hvis posisjon ikke sendes
⚠️ **GitHub.com Fallback** ⚠️