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
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
, ogdeleted
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