Skip to content

Database

echo-web-mono bruker PostgreSQL som database og Drizzle ORM for type-safe database-operasjoner. All database-relatert kode ligger i packages/db.

  • PostgreSQL - Relasjonell database
  • Drizzle ORM - Type-safe ORM for TypeScript
  • Drizzle Kit - CLI for migrasjoner og Drizzle Studio
  • Docker - Lokal database i container
Terminal window
# Start database (Docker)
pnpm db:up
# Stopp database
pnpm db:down
# Full database reset (sletter alt!)
pnpm db:setup
# Generer nye migrasjoner fra schema-endringer
pnpm db:generate
# Kjør migrasjoner
pnpm db:migrate
# Valider database schema
pnpm db:check
# Åpne Drizzle Studio (database GUI)
pnpm db:dev

Alle schemas ligger i packages/db/src/schemas/:

  • users - Brukere og profiler
  • sessions - Autentisering og sesjoner
  • happenings - Arrangementer
  • registrations - Påmeldinger til arrangementer
  • groups - Grupper og undergrupper
  • Og flere…

Database-pakken eksporteres med flere paths for ulike bruksområder:

// Server Components og API Routes
import { db } from "@echo-webkom/db/serverless";
// Hent brukere med relational query API
const users = await db.query.users.findMany({
with: {
memberships: true,
},
});
// Standard import for Node.js miljøer
import { db } from "@echo-webkom/db";
const user = await db.query.users.findFirst({
where: eq(users.id, userId),
});
// Importer schemas for queries
import { happenings, users } from "@echo-webkom/db/schemas";
import { and, eq, gte } from "drizzle-orm";
// Bruk med db
const upcomingHappenings = await db
.select()
.from(happenings)
.where(gte(happenings.date, new Date()));

Når du endrer schemas, må du generere og kjøre migrasjoner:

Terminal window
# 1. Endre schema i packages/db/src/schemas/
# 2. Generer migrasjon
pnpm db:generate
# 3. Sjekk at migrasjonen er korrekt
pnpm db:check
# 4. Kjør migrasjonen
pnpm db:migrate

Migrasjonsfiler lagres i packages/db/drizzle/ og bør committes til git.

Drizzle Studio er et visuelt verktøy for å utforske og redigere databasen:

Terminal window
pnpm db:dev

Åpnes automatisk på local.drizzle.studio (backend kjører på port 4983).

Database-tilkobling konfigureres i .env:

Terminal window
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/echo-web"

For lokal utvikling kan du bruke seeder-pakken:

Terminal window
# Seed med testdata
pnpm seed
# Seed med spesifikk modus
pnpm seed database --mode dev # Utviklingsdata
pnpm seed database --mode test # Testdata for E2E
pnpm seed database --mode prod # Produksjonslignende data

Drizzle har kraftig støtte for relasjonelle queries:

// Hent happening med påmeldinger og kommentarer
const happening = await db.query.happenings.findFirst({
where: eq(happenings.slug, "bedpres-bekk"),
with: {
registrations: {
with: {
user: true, // Include brukerinfo
},
},
comments: {
with: {
author: true,
reactions: true,
},
},
},
});
  • Type-sikkerhet - Drizzle gir fullstendig TypeScript type inference
  • Studio - Bruk Drizzle Studio for rask debugging og data-inspeksjon
  • Migrations - Alltid commit migrasjonsfiler til git
  • Serverless - Bruk @echo-webkom/db/serverless i Next.js for connection pooling