Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ npm-debug.log*

# Lokale miljøvariabler
.env
.env.test
backend/.env.test
.env.*.local
.env.local

Expand Down
83 changes: 76 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ Første innlevering var en klikkbar **frontend-prototype** som viser idéen og
hvordan løsningen er tenkt brukt. Katalogen henter fortsatt data fra mock i
nettleseren, og leie/utleie er demo uten innlogging.

**Datalag (innlevering 2):** PostgreSQL, migrasjon og seed ligger i `backend/`.
GraphQL og kobling fra React kommer i senere issues. Se
[Backend og database](#backend-og-database).
**Datalag (innlevering 2):** PostgreSQL, migrasjon, seed og GraphQL-API ligger i
`backend/`. Frontend henter fortsatt mock i nettleseren; Apollo Client kommer i
senere issue. Se [Backend og database](#backend-og-database).

### Idé

Expand Down Expand Up @@ -134,8 +134,9 @@ npm run dev # start utviklingsserver på http://localhost:5173

## Backend og database

Backend ligger i `backend/` og bruker PostgreSQL. GraphQL kommer i senere
issues; foreløpig finnes migrasjon og seed for eksempelannonsene.
Backend ligger i `backend/` og bruker PostgreSQL. Apollo Server 5 eksponerer
GraphQL på port 3001 (lokalt). Migrasjon og seed fyller `listings` med de samme
eksempelannonsene som mock i frontend.

| Miljø | Dokumentasjon |
| ---------------- | -------------------------------------------------------------------------------------------------------- |
Expand Down Expand Up @@ -215,6 +216,71 @@ Forvent **10** rader i `listings`. Seed-data tilsvarer
Det gjelder VM/Apache senere — se [deploy/apache/README.md](deploy/apache/README.md).
Lokal frontend bruker fortsatt mock og importerte SVG-er.

### GraphQL lokalt

Etter migrasjon og seed (steg 5–6 over):

```bash
cd backend
npm run dev # tsx watch, leser backend/.env
# eller: npm run start
```

Serveren logger URL til GraphQL-endepunktet (standard
`http://127.0.0.1:3001/graphql`). `HOST` og `PORT` settes i `backend/.env`
(samme som i `backend/.env.example`).

**Queries**

| Felt | Beskrivelse |
| ------------------ | --------------------------------------------- |
| `health` | Returnerer `"ok"`. |
| `listings` | Alle annonser, sortert på id. |
| `listing(id: ID!)` | Én annonse, eller `null` hvis id ikke finnes. |

**Mutations**

| Felt | Beskrivelse |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `createListing(input: CreateListingInput!)` | Oppretter annonse i `listings`. Validerer input som utleieskjemaet i frontend. Setter standardverdier for `condition`, `accessories` og `imageUrl`. |

Feltene returneres i camelCase (`dailyPrice`, `imageUrl`, osv.). Enkelt eksempel
med curl (juster URL om du har endret `PORT`):

```bash
curl -s -X POST http://127.0.0.1:3001/graphql \
-H 'Content-Type: application/json' \
-d '{"query":"{ health listings { id title dailyPrice } }"}'
```

### API-tester (backend)

GraphQL-testene ligger i `backend/src/graphql/graphql.api.test.ts` og kjører
mot en **egen testdatabase**, ikke utviklings- eller VM-databasen.

1. Kopier `backend/.env.test.example` til `backend/.env.test` og sett
`TEST_DATABASE_URL` til en database som **slutter på `_test`** (for eksempel
`verktoyutlan_test`).
2. Opprett databasen én gang, migrer og seed mot den:

```bash
cd backend
createdb verktoyutlan_test
set -a && source .env.test && set +a && export DATABASE_URL="$TEST_DATABASE_URL"
npm run migrate && npm run seed
```

3. Kjør tester:

```bash
npm test # én kjøring
npm run test:watch # ved endringer
```

Vitest laster bare `backend/.env.test` (ikke `.env`). Hvis
`TEST_DATABASE_URL` peker på en database uten `_test`-suffiks, feiler
`npm test` med en gang. Uten `.env.test` hoppes database-testene over.

## Kommandoer

| Kommando | Hva den gjør |
Expand All @@ -229,7 +295,8 @@ Lokal frontend bruker fortsatt mock og importerte SVG-er.
| `npm run format` | Formaterer alle filer med Prettier |
| `npm run format:check` | Sjekker formatering uten å endre filer |

Backend (`cd backend`): `npm run migrate`, `npm run seed`, `npm run typecheck`.
Backend (`cd backend`): `npm run dev`, `npm run start`, `npm run migrate`,
`npm run seed`, `npm run typecheck`, `npm test`.

ESLint finner feil i koden, mens Prettier bestemmer formateringen.
`eslint-config-prettier` ligger sist i `eslint.config.js` og slår av
Expand All @@ -247,9 +314,11 @@ deploy/
backend/
deploy/ systemd-mal og VM-deploy (port 3001)
migrations/ Versjonerte PostgreSQL-migrasjoner
src/db/ Tilkoblingspool
src/db/ Tilkoblingspool og repositories
src/graphql/ GraphQL-schema, resolvers og API-tester
src/scripts/ Seed og andre engangsskript
src/seed/ Seed-data for eksempelannonser
src/server.ts Apollo Server (GraphQL)
src/
types/ Felles datatyper, for eksempel Listing
data/ Mockdata. Byttes med GraphQL-backend senere
Expand Down
4 changes: 4 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# PostgreSQL-tilkobling. Kopier til .env og tilpass verdien.
DATABASE_URL=postgresql://bruker:passord@localhost:5432/verktoyutlan

# GraphQL-server (npm run dev / npm run start)
HOST=127.0.0.1
PORT=3001

# Valgfritt: rotsti når frontend er deployet (standard /project2).
# PUBLIC_APP_BASE=/project2
10 changes: 10 additions & 0 deletions backend/.env.test.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Kopier til .env.test (committes ikke). Kun testdatabase — ikke dev eller prod.
# Databasenavnet må slutte på _test (sjekkes av vitest.config.ts).
#
# Én gang per maskin:
# createdb verktoyutlan_test
# set -a && source .env.test && set +a && export DATABASE_URL="$TEST_DATABASE_URL"
# npm run migrate && npm run seed
#
# Kjøre tester: cd backend && npm test
TEST_DATABASE_URL=postgresql://bruker@localhost:5432/verktoyutlan_test
17 changes: 7 additions & 10 deletions backend/deploy/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
# Deploy: systemd og port 3001 (prosjekt 2)

Mal for å kjøre GraphQL-backenden som egen systemd-tjeneste på
`it2810-36.idi.ntnu.no`. **Ikke aktiver på VM før GraphQL-server er implementert**
(se eget issue). Det finnes ingen HTTP-server i backend i dag — kun migrasjon,
seed og databasepool.
`it2810-36.idi.ntnu.no`. **Ikke aktiver på VM** før migrasjon, seed og lokal
test av GraphQL er OK.

## Avhengighet (GraphQL-issue)
## Avhengighet før enable

Før `systemctl enable --now` må repoet ha minst:

- `backend/src/server.ts` (eller tilsvarende) som **leser `HOST` og `PORT` fra
miljø** og binder til **`127.0.0.1:3001`** (verdier fra
`/etc/t36-project2/backend.env` — ikke hardkode `0.0.0.0`).
- `backend/src/server.ts` som **leser `HOST` og `PORT` fra miljø** og binder til
**`127.0.0.1:3001`** (verdier fra `/etc/t36-project2/backend.env` — ikke
hardkode `0.0.0.0`).
- `npm ci` kjørt i `backend/`, slik at `node_modules/tsx/dist/cli.mjs` finnes.
- `npm run start` (eller `dev`) verifisert mot VM-database etter deploy av kode.
- Valgfritt senere: `npm run build` + `ExecStart` mot `dist/server.js` i stedet
for tsx.

`backend/package.json` har i dag **ikke** `start` — bare `migrate`, `seed` og
`typecheck`.

## Filer

| Fil | Formål |
Expand Down
4 changes: 2 additions & 2 deletions backend/deploy/backend.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

DATABASE_URL=postgresql://t36_project2:PASSORD@localhost:5432/t36_project2

# Krav til kommende GraphQL-server (eget issue): les HOST og PORT, lytt kun på
# 127.0.0.1 — ikke 0.0.0.0. Apache proxyer senere mot http://127.0.0.1:3001.
# GraphQL-server (src/server.ts): les HOST og PORT, lytt kun på 127.0.0.1 — ikke
# 0.0.0.0. Apache proxyer mot http://127.0.0.1:3001/graphql (se deploy/apache/).
HOST=127.0.0.1
PORT=3001
NODE_ENV=production
Expand Down
4 changes: 2 additions & 2 deletions backend/deploy/t36-project2-backend.service
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Mal for gruppens Ubuntu-VM. GraphQL-serveren finnes ikke ennå — ikke enable
# tjenesten før src/server.ts (eller tilsvarende) og npm run start er på plass.
# Mal for gruppens Ubuntu-VM. Ikke enable før npm ci, backend.env og GraphQL er
# verifisert lokalt (src/server.ts leser HOST/PORT, default 127.0.0.1:3001).
#
# Installasjon: se backend/deploy/README.md (erstatt __DEPLOY_USER__, __BACKEND_DIR__,
# __NODE_BIN__).
Expand Down
Loading