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

Arkitektur

Denne siden dokumenterer den overordnede systemarkitekturen.

Lagdelt arkitektur

Systemet følger en klassisk lagdelt arkitektur med følgende lag:

  • Controller – håndterer HTTP-forespørsler og svar.
  • Service – inneholder forretningslogikk.
  • Repository – samhandler med databasen via JDBC.
  • DTO (Data Transfer Object) – brukes til dataoverføring mellom lag og til/fra frontend.

Hver entitet skal kun snakke med sine respektive medlemmer av lagene over og under, med unntak av Service laget hvor det kan samhandles mellom entitetene.

Diagram

architecture drawio

Kommunikasjon

REST-API for hovedanndel av komunikasjon mellom frontend og backend. Dette er dokumentert via openAPI og Swagger UI. Når backend kjører lokalt, er Swagger tilgjengelig på: http://localhost:8080/swagger-ui/index.html

WebSocket for sanntid oppdatering mellom mellom frontend og backend. Dette er implementert med STOMP og Spring WebSocket. WebSocket-oppkobling skjer på /ws og bruker /topic for publikasjon og /app for meldinger fra klienten. Sanntidsoppdateringer er implementert for følgende entiteter:

  • Kartobjekter: Publisering av created, updated, og deleted via /topic/map-object/all.
  • Lokasjonsdeling: Publiseres per husholdning via /topic/location/{householdId}.
  • Hendelser: Sendes over /topic/events.

Autentisering skjer via JWT i query-param (?token=...) og valideres via WebSocketAuthHandshakeInterceptor.

JDBC for komunikasjon mellom backend og database (MySQL eller H2)

E-post for 2FA, passord tilbakestilling og notifikasjoner til bruker