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

Kildekode

Denne siden dokumenterer kildekoden for systemet og beskriver hvordan prosjektet er strukturert i henhold til god praksis og kravene i prosjektet. Backend koden er skrevet i Java og følger Google Checkstyle og Javadoc-konvensjoner. Alle tjenester er implementert med REST og WebSocket. Frontend er skrevet i React med Next.js.


Backend

Prosjektet er strukturert i et lagdelt arkitektur-mønster med følgende pakker:

  • config – inneholder Spring-konfigurasjoner (f.eks. sikkerhet, WebSocket, CORS).
  • controller – håndterer HTTP-forespørsler og eksponerer REST-endepunkter.
  • exception – tilpassede exception-klasser og håndtering.
  • model:
    • base – database-entiteter.
    • request – DTO-er for innkommende forespørsler.
    • response – DTO-er for svar.
    • update – DTO-er for oppdateringsforespørsler.
  • repository – grensesnitt for datatilgang med JDBC.
  • service – forretningslogikk og kommunikasjon med repository.
    • mapper – mapper mellom modeller og DTO-er, manuelt implementert.
  • websocket – tjenester og konfigurasjon for STOMP/WebSocket.
  • util – hjelpeklasser, f.eks. inndata validering.

Eksempel: FoodType-funksjonalitet

Controller:
FoodTypeController.java håndterer REST-endepunkter på /api/food-types, inkludert oppretting, oppdatering, sletting og søk.

Service:
FoodTypeService.java inneholder forretningslogikk og datatilgang via FoodTypeRepository.

Mapper:
FoodMapper.java og FoodTypeMapper.java mapper mellom entiteter og DTO-er.

DTO-er:

  • FoodTypeRequest.java – brukes for opprettelse og oppdatering.
  • FoodTypeResponse.java – brukes som svarobjekt til klient.

Repository:
Bruker JDBC og håndterer SQL direkte.

Logging

Backenden bruker SLF4J for logging av hendelser. Logger er konfigurert til å skrive til konsollen og kan endres i application.properties. Det er også mulig å bruke Logstash for mer avansert logging.

Sikkerhet

Backend bruker JWT-token for autentisering og autorisering. Token genereres ved innlogging og kontrolleres med hver forespørsel. Spring Security håndterer sikkerhet og validering av token. JWT-token valideres i JwtService, med støtte for claims som isAdmin og isSuperAdmin for rolle håndtering.

Kodekonvensjoner

  • Google Java Style Guide
  • Javadoc på alle klasser og metoder.
  • Lombok brukes for å redusere boilerplate i modellklasser.
  • OpenAPI annotasjoner i controllerne.

Tester

Backend følger teststruktur i src/test/java

Frontend

Frontend er ikke inkludert i dette repoet. Følgende struktur forventes:

  • actions - API-kall
  • app - Sider
  • components – Gjenbrukbare komponenter
  • types – Type-definisjoner
  • util – Hjelpefunksjoner

Kodekonvensjoner

  • ESLint og Prettier for linting og automatisk formatering.
  • TypeScript for type-sjekking og bedre utvikleropplevelse.

Oppsummering

Kildekoden er strukturert for skalerbarhet, med tydelig separasjon mellom ansvar. Backenden følger moderne praksis for RESTful design og sikker WebSocket-kommunikasjon med JWT-autentisering. Frontend er bygget med React og Next.js, med fokus på komponentbasert utvikling og gjenbrukbarhet. Koden er godt dokumentert og følger etablerte konvensjoner for både Java og JavaScript/TypeScript.