- 1. Kontekst
- 2. Funksjonelle Krav
- 3. Begrensninger
- 4. Programvarearkitektur
- 5. Kode
- 6. Data
- 7. Infrastrukturarkitektur
- 8. Distribusjon av tjenesten (deployment)
- 9. Utviklingsmiljø
- 10. Drift og støtte
Kafka konsumer og API-tjeneste for k9-sak innsynsplatform.
sequenceDiagram
participant k9s as K9 Sak
participant topic as Topic: privat-k9-sak-innsyn-v1
participant k9s-innsyn as K9 Sak Innsyn API
participant k9s-innsyn-db as K9 Sak Innsyn API DB
participant sif-innsyn-api as SIF Innsyn API
participant dine-pleiepenger as Dine pleiepenger
actor søker as søker
k9s ->> topic: Publiserer hendelse om PsbSøknadsinnhold
k9s ->> topic: Publiserer hendelse om Omsorg
k9s-innsyn --) topic: Konsumerer innsynshendelse
alt Innsynshendelse er PsbSøknadsinnhold
k9s-innsyn -> k9s-innsyn: Map til PsbSøknadDAO
k9s-innsyn ->> k9s-innsyn-db: Lagre PsbSøknadDAO
else Innsynshendelse er Omsorg
k9s-innsyn ->> k9s-innsyn: Map til OmsorgDAO
k9s-innsyn ->> k9s-innsyn-db: Lagre OmsorgDAO
end
søker ->> dine-pleiepenger: Hent søknadsopplysninger
dine-pleiepenger ->> sif-innsyn-api: Hent søknader
sif-innsyn-api ->> k9s-innsyn: Hent søknader
k9s-innsyn ->> k9s-innsyn: Hent barna søker har omsorgen for
k9s-innsyn ->> k9s-innsyn: Slå sammen søknadsopplysninger per barn
k9s-innsyn ->> dine-pleiepenger: Returner sammenslåtte søknader per barn
Denne tjenesten understøtter behovet for innsyn for bruker. Tjenesten lytter etter diverse innsynshendelser som e.g. søknadsopplysninger, informasjon om omsorg, tilbaketrekking av søknader. og lagrer/fjerner dem i/fra databasen. Tjenesten eksponerer også api-er for henting av overnevnte data, for å gi bruker innsyn i egne saker.
Denne tjenesten understøtter også behovet for etterrapportering av søknadsopplysninger for pleiepenger sykt-barn. For å gjøre det enklere konsumenter av disse opplysningene blir søknader slått sammen. Alle søknader registrert på barna søker har omsorg for blir hentet opp og slått sammen (kun perioder på arbeidstimer og tilsyn pr. nå). I de tilfellene det er kommet inn søknad fra annen omsorgsperson på samme barn som søker har omsorg for, er det kun perioder med tilsyn som slås sammen, ikke info fra annen omsorgsperson.
Innsyn i sakene til bruker begrenses til kapittel 9 ytelsene som e.g. omsorgspenger, pleiepenger, etc.
Hendelse med søknadsopplysninger om pleiepenger - sykt barn. Denne hendelsen konsumeres og persisteres i databasen.
Hendelse med informasjon om hvem som har omsorg for pleiepengetrengende. Denne hendelsen konsumeres og persisteres i databasen for å bli brukt som tilgangskontroll ved tilgang til søknadsopplysninger.
Hendelse som tilbaketrekking av søknader. Denne hendelsen konsumeres og sletter eventuelle søknader fra databasen.
Distribusjon av tjenesten er gjort med bruk av Github Actions. K9-sak Innsyn API CI / CD
Push/merge til dev-* branch vil teste, bygge og deploye til testmiljø. Push/merge til master branch vil teste, bygge og deploye til produksjonsmiljø og testmiljø.
- docker
- docker-compose
- Java 11
- Kubectl
For å bygge kode, kjør:
./gradlew clean build
For å kjøre kode, kjør:
./gradlew clean build && docker build --tag k9-sak-innsyn-api-local . && docker-compose up --build
Eller for å hoppe over tester under bygging:
./gradlew clean build -x test && docker build --tag k9-sak-innsyn-api-local . && docker-compose up --build
For produsere kafka meldinger, må man først exec inn på kafka kontaineren ved å bruker docker dashbord, eller ved å kjøre følgende kommando:
docker exec -it <container-id til kafka> /bin/sh; exit
Deretter, kjøre følgende kommando for å koble til kafka instansen:
kafka-console-producer --broker-list localhost:9092 --topic privat-sif-innsyn-mottak --producer.config=$CLASSPATH/producer.properties
Applikasjonen er konfigurert med en lokal oicd provider stub for å utsending og verifisering av tokens. For å kunne gjøre kall på endepunktene, må man ha et gyldig token.
- Åpne oicd-provider-gui i nettleseren enten ved å bruke docker dashbord, eller ved å gå til http://localhost:5000.
- Trykk "Token for nivå 4" for å logge inn med ønsket bruker, ved å oppgi fødselsnummer. Tokenet blir da satt som en cookie (selvbetjening-idtoken) i nettleseren.
- Deretter kan du åpne http://localhost:8080/swagger-ui.html for å teste ut endepunktene.
Om man ønsker å bruke postman må man selv, lage en cookie og sette tokenet manuelt. Eksempel: selvbetjening-idtoken=eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp.eyJzdWIiOiIwMTAxMDExMjM0NSIsImFjc.FBmVFuHI9d8akrVdAxi1dRg03qKV4EGk; Path=/; Domain=localhost; Expires=Fri, 18 Jun 2021 08:46:13 GMT;
- Kjør opp VTP via f.eks. k9-verdikjedetest repoet
- Kjør k9-sak-innsyn-api databasen via docker-compose
docker-compose -f docker-compose-vtp.yml up db --no-deps -d
- Start SifInnsynApiApplication med profilen
vtp
og env variabler fradocker-compose-env/vtp.env
. Variablene kan limes rett inn i Intellij Run Configuration. Alternativ, bruk docker-compose fila til å starte k9-sak-innsyn-apidocker-compose-vtp.yml
For å feilsøke data kan du bruke Swagger-UI.
For å kunne bruke endepunktene under DriftController må du logge inn med en Azure AD-bruker som har rollen 0000-GA-k9-drift.
Gjør følgende for å logge inn og få tilgang til API-et:
- Naviger til Swagger-UI ved å klikke på en av lenkene nedenfor.
- Klikk på "Authorize"-knappen øverst til høyre.
- Merk av i boksen for API-scopet og klikk på "Authorize".
- NB! Du trenger ikke å fylle inn noen hemmelig nøkkel. Lenker til Swagger-UI:
Loggene til tjenesten kan leses på to måter:
For dev-gcp: https://logs.adeo.no/goto/7db198143c27f93228b17f3b07f16e39
For prod-gcp: https://logs.adeo.no/goto/e796ec96af7bb1032a11d388e6849451
For dev-gcp:
kubectl config use-context dev-gcp
kubectl get pods -n dusseldorf | grep k9-sak-innsyn-api
kubectl logs -f k9-sak-innsyn-api-<POD-ID> --namespace dusseldorf -c k9-sak-innsyn-api
For prod-gcp:
kubectl config use-context prod-gcp
kubectl get pods -n dusseldorf | grep k9-sak-innsyn-api
kubectl logs -f k9-sak-innsyn-api-<POD-ID> --namespace dusseldorf -c k9-sak-innsyn-api
Vi bruker nais-alerts for å sette opp alarmer. Disse finner man konfigurert i nais/alerterator-prod.yml.
Spørsmål koden eller prosjekttet kan rettes til team dusseldorf på: