https://github.com/navikt/pam-stillingsok
Stilling søk
https://github.com/navikt/pam-stillingsok
pam stilling
Last synced: 30 days ago
JSON representation
Stilling søk
- Host: GitHub
- URL: https://github.com/navikt/pam-stillingsok
- Owner: navikt
- License: mit
- Created: 2018-05-03T13:22:45.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T08:34:54.000Z (about 1 year ago)
- Last Synced: 2024-10-29T09:22:05.334Z (about 1 year ago)
- Topics: pam, stilling
- Language: TypeScript
- Size: 18.3 MB
- Stars: 2
- Watchers: 15
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
## Beskrivelse
Frontend-applikasjon for visning av stillinger på [arbeidsplassen.nav.no](https://arbeidsplassen.nav.no).
Applikasjonen har ansvar for søk og filtrering av stillinger, lagring av favorittstillinger og lagring av søk slik at
brukere kan få daglige oppdateringer pr. e-post.
Applikasjonen henter stillinger fra en dokumentdatabase (OpenSearch) gjennom
[arbeidsplassen-search-api](https://github.com/navikt/arbeidsplassen-search-api). Lagrede søk og stillingsfavoritter, samt utsending av
e-poster skjer gjennom applikasjonen [pam-aduser](https://github.com/navikt/pam-aduser).
Navnet til innlogget bruker hentes fra [pam-aduser](https://github.com/navikt/pam-aduser).
## Copilot Cheatsheet 🚀
**Prosjektregler (Next.js 14 + TypeScript + Vitest)**
- ✅ Bruk **TypeScript** (ikke JS)
- ✅ Bruk **`type`** fremfor `interface`
- ✅ **Aldri `any`** → bruk `unknown` + innsnevring/validering
- ✅ **Komponentstil:**
- Funksjonsdeklarasjon som standard
- `const` pilfunksjon kun ved `memo`, `forwardRef`, generiske komponenter eller `displayName`
- ✅ Next.js App Router-konvensjoner (`next/link`, `next/navigation`, `server actions`)
- ✅ Test med **Vitest**, filer skal hete `*.test.ts(x)` og ligge ved siden av koden
- ✅ Små, gjenbrukbare komponenter → del logikk i hooks/utils
- ✅ **Leselige variabelnavn** (unngå korte navn som `a`, `b`, `x`, `obj`, `acc`)
- ✅ Tilgjengelighet (WCAG) ivaretatt i UI
📌 For detaljer, se [`copilot-instructions.md`](./.github/copilot-instructions.md).
## Før kjøring av applikasjonen lokalt
### Hvordan få tilgang til @navikt/arbeidsplassen-react og @navikt/arbeidsplassen-css
Opprett fila `.npmrc` i hjemkatalogen din. F.eks. `~/.npmrc` Mer info: https://docs.npmjs.com/cli/v9/configuring-npm/npmrc
Legg til følgende i fila
```
@navikt:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=$TOKEN
```
Opprett et token med "read:packages" rettigheter. [https://github.com/settings/tokens](https://github.com/settings/tokens) Bytt ut \$TOKEN med tokenet du akkurat opprettet. Velg Authorize token under "Configure SSO" for å gi tokenet tilgang til @navikt.
> [!CAUTION]
> Ikke sjekk inn `.npmrc` til GitHub.
Mer informasjon om autentisering: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-with-a-personal-access-token
### Wonderwall
> [!TIP]
> Gå igjennom login-flyten ved å trykke login. Bruk testbruker `04010100653`
### Docker Compose
For å kjøre backend så trenger du å installere [Docker](https://docs.docker.com/engine/install/),
og for å få tilgang til images må du ha [gcloud cli](https://cloud.google.com/sdk/docs/install) installert.
For å kjøre Docker Compose lokalt, trenger du repot med fellestjenester.
Hvis du ikke har det, klone det og legg i samma mappe som `pam-stillingsok`:
```shell
git clone git@github.com:navikt/pam-docker-compose-shared.git ../pam-docker-compose-shared
```
#### Autentiser Docker repo
Autentiser `gcloud`
```shell
gcloud auth login
```
Legg in Docker repo i credentials helper
```shell
gcloud auth configure-docker europe-north1-docker.pkg.dev
```
Hent token og logg in i Docker
```shell
gcloud auth print-access-token \
| docker login \
-u oauth2accesstoken \
--password-stdin https://europe-north1-docker.pkg.dev
```
Du kan nå starte Docker Compose for fellestjenestene og lokalt, med kommandoen som passer til det du trenger
```shell
$ npm run start:dependencies
.. eller ...
$ npm run start:dependencies-with-local-search
.. eller ...
$ npm run start:dependencies-with-update-containers
```
> [!TIP]
> Får du feil når du kjører `npm run start:dependencies` kan det hende du må oppdatere `pam-aduser` imaget i `docker-compose.yml`
> For å liste opp de siste 10 versjonene (docker tagsen)
>
> ```shell
> gcloud container images list-tags europe-north1-docker.pkg.dev/nais-management-233d/teampam/pam-aduser --sort-by=~tags --filter="tags:* AND NOT tags:sha256*" --limit=10 --format="value(tags)" | cut -d "," -f2
> ```
Skriptet sørger for å starte felles tjenester og lage databaser som trengs.
> [!TIP]
> Du kan også automatisk oppdatere avhengigheter med denne kommandoen
>
> ```shell
> ./update-containers.sh
> ```
## Start applikasjonen
```shell
$ npm install
$ npm run dev
```
Du kan deretter velge å kjøre applikasjonen med teststillinger fra dev- eller prod-miljøet, eller kjøre en lokal instans av opensearch.
Sistnevnte krever at du registrerer stillinger i stillingsregistrering lokalt, og er nødvendig for å enkelt kunne teste superrask søknad lokalt.
Gå til instruksjonene som passer det du vil starte opp.
Når applikasjonen er oppe, så kan du gå inn på [http://localhost:3000/stillinger](http://localhost:3000/stillinger)
(selve applikasjonen kjører på port 3003, men for å kunne benytte autentisering bruker du port 3000).
### Med teststillinger fra dev- og prod-miljøet
For å starte docker-containere for redis, mock-oauth2-server og wonderwall.
```shell
$ npm run start:dependencies
```
### Med teststillinger fra lokal opensearch
Bruk dette oppsettet hvis du ønsker å registrere stillinger lokalt og/eller teste superrask søknad lokalt.
Dette krever at du også kjører upp `pam-stillingsregistrering` lokalt, med tilhørende Docker-tjenester som følger med lokalt søk.
For å starte alle containrer, kjør
```shell
$ npm run start:dependencies-with-local-search
```
## Deployment
Lyst til å teste i dev-miljøet? `feature/**` branches pushes automatisk til dev eller så kan man alternativt legge til `deploy:dev` i commit meldingen for å trigge deployment til dev. Dette vil hoppe over opprettelsen av draft release, se deploy-dev.yml fila eller [pam-deploy](https://github.com/navikt/pam-deploy/blob/master/.github/workflows/deploy-dev.yml) for mer.
## Bruk av innloggede tjenester
For å kunne bruke innloggede tjenester (dvs. favoritter og lagrede søk), må du først kjøre `pam-aduser`.
> [!TIP]
> Tjenesten `pam-aduser` startes automatisk av `npm run start:dependencies`
## Teknisk dokumentasjon
### Avhengigheter
- [arbeidsplassen-search-api](https://github.com/navikt/arbeidsplassen-search-api)
- [pam-aduser](https://github.com/navikt/pam-aduser)
### Teknologier
Stillingsøket kjører i Next.js rammeverket. Den viser stillinger, favoritter og lagrede søk. Brukere kan søke etter
stillinger uten å logge inn, mens favoritter og lagrede søk krever innlogging.
Server-side står for en del logikk, blant annet
konvertering av søkekriterier i frontend til ElasticSearch for å kunne utføre spørringer mot arbeidsplassen-search-api.
### Systemlandskap
Bildet viser en forenklet skisse av `pam-stillingsok` og nærmeste integrasjoner.

### Stillingsdatabase (ElasticSearch) og arbeidsplassen-search-api
[navikt/arbeidsplassen-search-api](http://github.com/navikt/arbeidsplassen-search-api) har en dokumentdatabase med stillinger
(ElasticSearch) som `pam-stillingsok` henter stillinger fra via REST.
En index-tjeneste henter stillinger fra stillingsdatabasen og indekserer dem til ElasticSearch via
REST.
### Lagrede favoritter, lagrede søk og pam-aduser
[navikt/pam-aduser](http://github.com/navikt/pam-aduser) har funksjonalitet for lagring av
favorittstillinger, lagrede søk og utsending av epost med lagrede søk. Appen har et REST API som `pam-stillingsok` bruker for å
hente og editere favoritter og lagrede søk.
Favorittstillinger lagres i en Postgres-database i `pam-aduser`. Favorittene synces mot
stillingsdatabasen med masterdata for stillinger via REST for å fange opp endringer i stillingannonsers status, tittel
osv.
Lagrede søk fungerer ved at `pam-stillingsok` genererer en predefinert spørring som kan eksekveres mot `arbeidsplassen-search-api`.
Denne spørringen lagres i `pam-aduser`. Hver natt kjøres alle lagrede spørringer mot `pam-stillingsok`. Nye
stillinger sendes til brukere over epost med Microsoft Graph API.
,