Skip to content
Closed
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
7 changes: 7 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"singleQuote": true,
"semi": true,
"trailingComma": "all",
"printWidth": 80,
"endOfLine": "auto"
}
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
}
11 changes: 11 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"eslint.workingDirectories": ["./client", "./backend"],
"[markdown]": {
"editor.formatOnSave": false
}
}
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ type WineMatch {
| Backend | Node.js, TypeScript, Apollo Server | GraphQL er krav i oppgaven, og Apollo Server er godt dokumentert |
| Database | PostgreSQL | Relasjonsdatabase som passer godt til viner, brukere og favoritter. Støtter også effektiv søking, filtrering og sortering |
| Testing | Vitest | Vitest er krav i oppgaven |
| Kodekvalitet | oxlint og Prettier | Linting og felles formatering |
| Kodekvalitet | ESLint og Prettier | ESLint finner feil og feil bruk av React-hooks, og Prettier gir lik formatering i hele prosjektet. ESLint fulgte med Vite-malen, så vi bruker det samme oppsettet i backend |



Expand Down Expand Up @@ -553,6 +553,26 @@ npm run dev

Åpne http://localhost:5173/project2/. Frontend henter data fra http://localhost:3001/. En annen adresse kan settes med `VITE_GRAPHQL_URL` (se `client/.env.example`).

### Linting og formatering

Hele prosjektet bruker ESLint og Prettier, med samme oppsett i `client/` og `backend/`:

- **ESLint** finner feil og risikable mønstre i koden, for eksempel ubrukte variabler og feil bruk av React-hooks. Oppsettet ligger i `eslint.config.js` i hver mappe.
- **Prettier** formaterer koden likt for alle, så kodegjennomgang handler om innholdet og ikke om mellomrom og anførselstegn. Reglene ligger i `.prettierrc.json` i rotmappen og gjelder begge mappene.
- **eslint-config-prettier** slår av ESLint-reglene som ellers ville vært uenige med Prettier.

Kommandoene kjøres i `client/` eller `backend/`:

| Kommando | Hva den gjør |
|---|---|
| `npm run lint` | Finner feil med ESLint |
| `npm run format` | Formaterer alle filene med Prettier |
| `npm run format:check` | Sjekker formateringen uten å endre noe |

Repoet har VS Code-innstillinger i `.vscode/` som formaterer med Prettier hver gang du lagrer, og retter det ESLint kan rette automatisk. VS Code foreslår utvidelsene Prettier og ESLint når du åpner prosjektet. Kjør `npm run lint` og `npm run format:check` i begge mappene før du lager en pull request.

Backend bruker TypeScript 6, samme versjon som klienten, fordi typescript-eslint ennå ikke støtter TypeScript 7.

### Kjøring på VM-en

Applikasjonen kjører på http://it2810-01.idi.ntnu.no/project2, og GraphQL-backend på http://it2810-01.idi.ntnu.no:3001/. VM-en kan bare nås fra NTNU-nettet eller via VPN. Hvilken commit som kjører, står i http://it2810-01.idi.ntnu.no/project2/version.txt.
Expand Down
5 changes: 5 additions & 0 deletions backend/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Build output and the X-Wines data are not our code.
dist
data
# Generated by npm, so it should not be reformatted.
package-lock.json
Empty file.
21 changes: 21 additions & 0 deletions backend/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// ESLint finds bugs and risky patterns in the backend code.
// Formatting is left to Prettier: eslint-config-prettier (last in the list)
// turns off the ESLint rules that would disagree with it.
import js from '@eslint/js';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import eslintConfigPrettier from 'eslint-config-prettier/flat';
import { defineConfig, globalIgnores } from 'eslint/config';

export default defineConfig([
globalIgnores(['dist', 'data']),
{
files: ['**/*.ts'],
extends: [js.configs.recommended, tseslint.configs.recommended],
languageOptions: {
// The backend runs in Node.js, not in a browser
globals: globals.node,
},
},
eslintConfigPrettier,
]);
Loading