From b9a6aac1a36565220afdb6d548799b1f3b85856e Mon Sep 17 00:00:00 2001 From: Sebastian Ingebrigtsen Date: Thu, 1 Oct 2026 18:41:53 +0200 Subject: [PATCH 1/5] =?UTF-8?q?build(config):=20krev=20Node-versjon=20som?= =?UTF-8?q?=20alle=20avhengighetene=20st=C3=B8tter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: tordtst --- README.md | 7 ++++--- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f47fe42..e04238a 100644 --- a/README.md +++ b/README.md @@ -66,11 +66,12 @@ Betaling, depositum, frakt og chat er ikke en del av planen. ## Krav -- Node.js 24 (LTS). Versjonen står i `.nvmrc`, så med nvm holder det å kjøre - `nvm use`. +- Node.js 24.15 eller nyere (LTS). Versjonen står i `.nvmrc`, så med nvm holder + det å kjøre `nvm use`. - npm 10 eller nyere (følger med Node). -`engines` i `package.json` angir minstekrav (Node 22.22 og npm 10), men npm +`engines` i `package.json` angir minstekrav: Node 22.22.2 eller 24.15 og +npm 10. Lavere versjoner støttes ikke av `jsdom`, som testene bruker. npm stopper ikke installasjonen hvis versjonen er feil. Sjekk selv med `node -v` og `npm -v`. diff --git a/package-lock.json b/package-lock.json index ba87ddc..5ba7022 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "vitest": "^5.0.3" }, "engines": { - "node": ">=22.22.0", + "node": "^22.22.2 || >=24.15.0", "npm": ">=10" } }, diff --git a/package.json b/package.json index c3be60a..83e9c8c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "engines": { - "node": ">=22.22.0", + "node": "^22.22.2 || >=24.15.0", "npm": ">=10" }, "scripts": { From 46327c3b3195eb7293b08864a0172ea10b05a52b Mon Sep 17 00:00:00 2001 From: Sebastian Ingebrigtsen Date: Thu, 1 Oct 2026 18:43:07 +0200 Subject: [PATCH 2/5] fix(app): legg til favicon Co-authored-by: birkjr --- index.html | 1 + public/favicon.svg | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 public/favicon.svg diff --git a/index.html b/index.html index f037032..bf89a20 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,7 @@ name="description" content="Lei og lån verktøy av andre i Trondheim." /> + Verktøyutlån Trondheim diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..06ea025 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,7 @@ + + + + + + + From 14b45eb4b9fa87e4dd6f572ff34f8bdedd286daf Mon Sep 17 00:00:00 2001 From: Sebastian Ingebrigtsen Date: Thu, 1 Oct 2026 18:43:24 +0200 Subject: [PATCH 3/5] =?UTF-8?q?docs(docs):=20dokumenter=20sluttkontrollen?= =?UTF-8?q?=20f=C3=B8r=20f=C3=B8rste=20innlevering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: andretg Co-authored-by: tordtst --- docs/ki-bruk.md | 1 + docs/testing.md | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/ki-bruk.md b/docs/ki-bruk.md index afec056..5650b33 100644 --- a/docs/ki-bruk.md +++ b/docs/ki-bruk.md @@ -38,3 +38,4 @@ ser hva vi bør være oppmerksomme på. | #20 | Skrev avsnittene om idé, visninger, mockup og planer i README | Teksten ble sjekket mot appen. Sortering ble utelatt til #16 var merget | | #7 | Satte opp Vitest og skrev 79 tester, og kontrollerte ren installasjon, bredder og tastatur | En test sjekket påkrevde felt med `toBeInvalid()` og ville bestått uansett. Byttet til `aria-invalid`. Nettleserkontrollene var automatiserte, se [testing.md](testing.md) | | #3 | Skrev prosjektstandard, maler for issues og pull requests og dette dokumentet | Standarden ble sjekket mot commit-historikken og reglene i repoet | +| #21 | Kjørte sluttkontrollen før innlevering 1 og rettet det den fant | Fant at `engines` tillot Node-versjoner som `jsdom` ikke støtter, og at favicon manglet. Begge er rettet. PR-er, review og merge til `main` gjøres av gruppen | diff --git a/docs/testing.md b/docs/testing.md index 51f7aa9..9c35a94 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -102,6 +102,27 @@ utleieskjemaet. - Annonsekort åpnes med Enter. - Etter en innsending med feil havner fokus på første ugyldige felt. +### Sluttkontroll før innlevering 1 + +Kontrollert 1. oktober 2026 på `dev` etter at alle issues i milestonen var +merget, med en ny klone, Node 24.21 og npm 11.19. + +| Kontroll | Resultat | +| ----------------------------------------------------------------- | -------- | +| `npm ci` og `npm run dev` etter README | OK | +| typecheck, lint, format:check, test (79) og build | OK | +| `engines` i `package.json` og `package-lock.json` er like | OK | +| Katalog, detaljvisning og utleieskjema nås med bare tastatur | OK | +| Betalt leie og gratis utlån skilles med tekst på kort og detaljer | OK | +| Bare to knapper sender inn, og begge er merket «(demo)» | OK | +| Ingen feil i nettleserkonsollen | OK | + +Kontrollen fant to feil som er rettet: + +- `engines` tillot Node-versjoner som `jsdom` ikke støtter. Kravet er nå + Node 22.22.2 eller 24.15 og nyere. +- Favicon manglet, så nettleseren logget en 404. Appen har nå et eget ikon. + ## Gjenstående kontroller Kontroller som ikke er gjort ennå. Kryss av og skriv dato og hvem når de er @@ -126,5 +147,3 @@ gjort, og flytt resultatet opp i dokumentet. - **Ingen ende-til-ende-tester eller API-tester ennå.** De kommer når backenden finnes. Testene for appen rendrer hele `App` i en `MemoryRouter`, men kjører i jsdom og sjekker ikke layout. -- **`favicon.ico` mangler**, så nettleseren logger en 404 i konsollen. Det - påvirker ikke appen. From f6f0420bde67191e85fb9f54ae0c7ffcb694c9ff Mon Sep 17 00:00:00 2001 From: Sebastian Ingebrigtsen Date: Thu, 1 Oct 2026 18:44:45 +0200 Subject: [PATCH 4/5] docs(docs): beskriv planlagte data og sortering i katalogen Co-authored-by: birkjr Co-authored-by: andretg --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e04238a..fe8c512 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ låne verktøy i nærheten i stedet for å kjøpe nytt. | Visning | Slik kommer du dit | Hva du kan gjøre | | -------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------- | -| Katalog | Startsiden, «Katalog» i menyen eller navnet øverst | Se alle annonsene, søke og filtrere på kategori og gratis utlån | +| Katalog | Startsiden, «Katalog» i menyen eller navnet øverst | Se alle annonsene, søke, filtrere på kategori og gratis utlån og sortere på pris | | Detaljvisning | Klikk på et annonsekort i katalogen | Se bilde, beskrivelse, tilstand, tilbehør og pris, velge datoer og se samlet pris | | Lei ut verktøy | «Lei ut verktøy» i menyen | Fylle ut skjemaet for en ny annonse med tittel, kategori, beskrivelse, område og pris | @@ -48,6 +48,27 @@ annonser viser for eksempel «150 kr/døgn», mens gratis annonser viser Søk og filtre virker bare på eksempelannonsene i nettleseren, og det som er fylt ut i skjemaene, forsvinner når siden lastes inn på nytt. +### Data + +En annonse har i dag tittel, kategori, beskrivelse, område i Trondheim, +døgnpris, tilstand, tilbehør og bilde. Feltene er beskrevet under +[Datamodell og mockdata](#datamodell-og-mockdata). + +I den ferdige løsningen ligger dataene i en database: + +| Data | Innhold | +| ------------- | ---------------------------------------------------------------------- | +| Verktøymodell | Produktinformasjon som er lik for alle eksemplarer, for eksempel merke | +| Annonse | Ett fysisk eksemplar med eier, tilstand, pris, område og bilde | +| Bruker | Den som legger ut annonser eller sender leieforespørsler | +| Booking | Leieperiode og status: sendt, godkjent, avslått, utlevert eller levert | +| Vurdering | Leietakerens vurdering etter et gjennomført leieforhold | + +Annonser, bookinger og vurderinger er de brukergenererte dataene som lagres. +For å teste søk og blaing i store resultatsett fyller vi databasen med +genererte eksempelannonser via et seed-skript. Om vi henter produktdata fra en +ekstern kilde, er ikke avklart. + ### Planlagt videre - **Backend og database:** En egen GraphQL-backend i Node og TypeScript med From cae007b9910338bf2cb29bca4d012c3f05197546 Mon Sep 17 00:00:00 2001 From: Sebastian Ingebrigtsen Date: Thu, 1 Oct 2026 18:45:09 +0200 Subject: [PATCH 5/5] docs(docs): utvid planen videre og be om tilbakemeldinger Co-authored-by: tordtst --- README.md | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index fe8c512..59790e2 100644 --- a/README.md +++ b/README.md @@ -72,18 +72,41 @@ ekstern kilde, er ikke avklart. ### Planlagt videre - **Backend og database:** En egen GraphQL-backend i Node og TypeScript med - PostgreSQL, som kjører på gruppens VM. Frontend henter data med Apollo - Client i stedet for fra mockdataene. -- **Søk i hele databasen:** Søk, filtre og sortering skjer på serveren, med - paginering av store resultatsett. + PostgreSQL. Begge kjører direkte på gruppens VM, uten Docker. Appen blir + tilgjengelig via Apache under `/project2`, og backenden på port 3001. +- **Søk i hele databasen:** Søk, filtre og sortering skjer på serveren, før + resultatet deles opp i sider. Katalogen får blaing med «Forrige» og + «Neste», og endrede valg starter på første side. Søket venter til brukeren + har sluttet å skrive (debouncing), og svar på utdaterte søk forkastes. +- **State:** Apollo Client henter og bufrer data fra backenden. Søk, filtre og + sortering ligger fortsatt i URL-en. - **Innlogging og egne annonser:** Brukere kan opprette, redigere og deaktivere egne annonser. Serveren sjekker at bare eieren kan endre dem. - **Booking:** Eieren godkjenner eller avslår leieforespørsler, og begge parter ser sine leieforhold. Godkjente bookinger kan ikke overlappe for samme verktøy. Utlevering og retur registreres, og leietakeren kan gi en vurdering etterpå. Gratis utlån bruker samme flyt. - -Betaling, depositum, frakt og chat er ikke en del av planen. +- **Tilgjengelighet:** Semantisk HTML, tastaturnavigasjon, synlig fokus og + kontrast etter WCAG 2.1 er på plass allerede. Senere kommer test med + skjermleser og en manuell brukertest. +- **Bærekraft:** Små bilder som lastes når de trengs, systemfont, buffring og + spørringer som bare henter feltene som vises. Vi måler datamengde og antall + forespørsler. +- **Testing:** Komponenttester med Vitest finnes allerede. Senere kommer + API-tester mot en testdatabase og en ende-til-ende-test med Playwright av en + hel leieflyt. + +Betaling, depositum, frakt og chat er ikke en del av planen. Hvis kjernen blir +ferdig og testet, vurderer vi prosjektlister, for eksempel «Bygg en +bokhylle», med verktøyene som trengs. + +### Dette ønsker vi tilbakemelding på + +- Er idéen og forskjellen på leie og gratis utlån lett å forstå? +- Mangler katalogen filtre eller sorteringer du ville brukt, for eksempel + område eller ledige datoer? +- Er det tydelig hvordan en leieforespørsel fungerer? +- Er det noe i datamodellen over som virker unødvendig, eller som mangler? ## Krav