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
106 changes: 96 additions & 10 deletions backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,96 @@ GraphQL-server (Apollo Server) med egen PostgreSQL-database.

## Kom i gang

Krever Node 24.6+ og PostgreSQL.
> **Vil du bare bruke appen?** Gå til http://it2810-16.idi.ntnu.no/project2. Du trenger ikke installere noe.
>
> Guiden under er for å kjøre backenden på din egen maskin.
Guiden er for macOS. Se [Windows](#windows) for forskjellene der.

### 1. Installer verktøyene (bare første gang)

Du trenger **Node.js 24.6 eller nyere** (kjører koden) og **PostgreSQL** (databasen). Enklest er å installere dem med [Homebrew](https://brew.sh):

```bash
cd backend
brew install node postgresql@17
brew services start postgresql@17 # starter databasen i bakgrunnen, også etter omstart
```

Sjekk at det virker:

```bash
node --version # skal være v24.6 eller nyere
pg_isready # skal si "accepting connections"
```

### 2. Hent koden og installer avhengigheter

```bash
git clone https://git.ntnu.no/IT2810-H26/T16-Project-2.git
cd T16-Project-2/backend
npm install
cp .env.example .env # fyll inn DATABASE_URL og TMDB_READ_TOKEN
createdb framerate # lager en tom database (første gang)
npm run db:migrate # lager tabellene
npm run import:movies # henter ~5000 filmer fra TMDB (under ett minutt)
npm run dev # starter serveren på http://localhost:3001
```

### 3. Lag innstillingsfilen

```bash
cp .env.example .env
```

Åpne `.env` og lim inn en TMDB-nøkkel etter `TMDB_READ_TOKEN=`. Lag din egen gratis nøkkel på [TMDB](https://www.themoviedb.org/settings/api) og bruk «API Read Access Token» (den lange). (Gruppemedlemmer bruker gruppas nøkkel, som deles privat og aldri på git.) Resten av verdiene fungerer som de er. `.env` er ignorert av git og skal aldri committes.

#### Om TMDB-nøkkelen

Nøkkelen trengs til to ting:

- **Importen** (`npm run import:movies`) henter filmene til databasen.
- **Serveren** henter filmdetaljer (beskrivelse, regissør, spilletid, aldersgrense) når noen åpner en film.

Uten nøkkel stopper importen med `TMDB_READ_TOKEN mangler`, databasen blir tom og alle søk gir 0 treff. Detaljsiden virker heller ikke.

| Hvem | Trenger nøkkel? |
| ------------------------------- | ----------------------------------------------------------------------- |
| Brukere av nettsiden | Nei, de bruker bare lenken. Backenden kjører allerede på VM-en. |
| Gruppemedlemmer | Ja, gruppas felles nøkkel. Deles privat i gruppa, aldri på git. |
| Andre som kjører backenden selv | Ja, sin egen gratis nøkkel fra TMDB |
| Faglærer | Nøkkelen ligger i `.env` på VM-en og kan leses der med sudo-rettigheter |

### 4. Lag databasen og fyll den med filmer

```bash
createdb framerate # lager en tom database
npm run db:migrate # lager tabellene
npm run import:movies # henter ~5000 filmer fra TMDB
```

### 5. Start serveren

```bash
npm run dev # starter serveren på http://localhost:3001
```

Åpne http://localhost:3001 i nettleseren for å teste spørringer i Apollo Sandbox.

**Neste gang** holder det med `npm run dev` i `backend/`. Databasen og filmene ligger der fortsatt.

### Vanlige feil

| Feilmelding | Løsning |
| -------------------------------------- | ----------------------------------------------------------------------- |
| `DATABASE_URL mangler` | `.env` finnes ikke. Kjør `cp .env.example .env` (steg 3) |
| `TMDB_READ_TOKEN mangler` | Nøkkelen er ikke lagt inn i `.env` |
| `ECONNREFUSED` / `connection refused` | PostgreSQL kjører ikke. Kjør `brew services start postgresql@17` |
| `database "framerate" does not exist` | Kjør `createdb framerate` |
| Feil om `--env-file` eller `.ts`-filer | For gammel Node. Sjekk `node --version` |
| `extension "pg_trgm" is not available` | PostgreSQL-installasjonen mangler tillegg. Bruk Homebrew-versjonen over |

### Windows

- Installer Node fra [nodejs.org](https://nodejs.org) og PostgreSQL fra [postgresql.org](https://www.postgresql.org/download/windows/). Installasjonen ber deg velge et passord for brukeren `postgres`.
- Bruk `copy .env.example .env` i stedet for `cp`.
- Sett brukernavn og passord i `.env`: `DATABASE_URL=postgres://postgres:DITT_PASSORD@localhost:5432/framerate`
- Lag databasen med `createdb -U postgres framerate` (eller i pgAdmin).

## Skript

| Kommando | Hva den gjør |
Expand All @@ -36,21 +112,31 @@ npm run dev # starter serveren på http://localhost:3001

```graphql
query {
searchMovies(search: "star", genreIds: [878], yearFrom: 1970, sort: RATING_DESC, limit: 20, offset: 0) {
searchMovies(
search: "star"
genreIds: [878]
yearFrom: 1970
sort: RATING_DESC
limit: 20
offset: 0
) {
totalCount
movies {
id
title
releaseYear
posterPath
averageRating
genres { name }
genres {
name
}
}
}
movie(id: 11) {
title
averageRating
details { # hentes fra TMDB, bruk bare på detaljsiden
details {
# hentes fra TMDB, bruk bare på detaljsiden
overview
director
runtime
Expand Down
17 changes: 17 additions & 0 deletions docs/AI_Deklarasjon/AI_Deklarasjon.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,20 @@ Her dokumenterer vi bruk av KI-verktøy i prosjektet, med én del per pull reque
- Lage kamera logoen
- Forslag til hvordan nettsiden kan se ut
- Viste en lettere måte å holde koden organisert som f.eks. med layout mappe


## PR #23 – Oppsettguide for backend (`docs/backend-setup-guide`)

**Verktøy:** Claude (Anthropic) via Claude Code
**Brukt av:** Akhil

### Hva KI ble brukt til

- Skrive steg-for-steg guiden i `backend/README.md`: installasjon, `.env`, database, import og oppstart
- Tabell med vanlige feil og en egen del for Windows
- Forklaring av hvem som trenger TMDB-nøkkel

### Hva vi har gjort selv

- Bestemt hva guiden skal inneholde og hvem den er for (utviklere, ikke vanlige brukere), og at gruppas nøkkel ikke skal deles
- Testet stegene på macOS