Database
echo-web-mono bruker PostgreSQL som database og Drizzle ORM for type-safe database-operasjoner. All database-relatert kode ligger i packages/db.
Teknologier
Section titled “Teknologier”- PostgreSQL - Relasjonell database
- Drizzle ORM - Type-safe ORM for TypeScript
- Drizzle Kit - CLI for migrasjoner og Drizzle Studio
- Docker - Lokal database i container
Viktige kommandoer
Section titled “Viktige kommandoer”# Start database (Docker)pnpm db:up
# Stopp databasepnpm db:down
# Full database reset (sletter alt!)pnpm db:setup
# Generer nye migrasjoner fra schema-endringerpnpm db:generate
# Kjør migrasjonerpnpm db:migrate
# Valider database schemapnpm db:check
# Åpne Drizzle Studio (database GUI)pnpm db:devDatabase-struktur
Section titled “Database-struktur”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…
Bruke database-pakken
Section titled “Bruke database-pakken”Database-pakken eksporteres med flere paths for ulike bruksområder:
I Next.js (serverless)
Section titled “I Next.js (serverless)”// Server Components og API Routesimport { db } from "@echo-webkom/db/serverless";
// Hent brukere med relational query APIconst users = await db.query.users.findMany({ with: { memberships: true, },});I API/backend (Node.js)
Section titled “I API/backend (Node.js)”// Standard import for Node.js miljøerimport { db } from "@echo-webkom/db";
const user = await db.query.users.findFirst({ where: eq(users.id, userId),});Schemas direkte
Section titled “Schemas direkte”// Importer schemas for queriesimport { happenings, users } from "@echo-webkom/db/schemas";import { and, eq, gte } from "drizzle-orm";
// Bruk med dbconst upcomingHappenings = await db .select() .from(happenings) .where(gte(happenings.date, new Date()));Migrasjoner
Section titled “Migrasjoner”Når du endrer schemas, må du generere og kjøre migrasjoner:
# 1. Endre schema i packages/db/src/schemas/# 2. Generer migrasjonpnpm db:generate
# 3. Sjekk at migrasjonen er korrektpnpm db:check
# 4. Kjør migrasjonenpnpm db:migrateMigrasjonsfiler lagres i packages/db/drizzle/ og bør committes til git.
Drizzle Studio
Section titled “Drizzle Studio”Drizzle Studio er et visuelt verktøy for å utforske og redigere databasen:
pnpm db:devÅpnes automatisk på local.drizzle.studio (backend kjører på port 4983).
Miljøvariabler
Section titled “Miljøvariabler”Database-tilkobling konfigureres i .env:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/echo-web"Testdata
Section titled “Testdata”For lokal utvikling kan du bruke seeder-pakken:
# Seed med testdatapnpm seed
# Seed med spesifikk moduspnpm seed database --mode dev # Utviklingsdatapnpm seed database --mode test # Testdata for E2Epnpm seed database --mode prod # Produksjonslignende dataRelational Queries
Section titled “Relational Queries”Drizzle har kraftig støtte for relasjonelle queries:
// Hent happening med påmeldinger og kommentarerconst 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/serverlessi Next.js for connection pooling