Scheduling Service — Local Dev Setup
Status: populated Owner: TBD Last updated: 2026-04-17 Companion: Service Template
1. Prerequisites
Node.js 22.x, pnpm 9.x, Docker + Docker Compose 24+.
2. docker-compose.yml (dev stack)
version: "3.9"
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: ghasi
POSTGRES_PASSWORD: ghasi_dev
POSTGRES_DB: scheduling_dev
ports:
- "5434:5432"
nats:
image: nats:2.10-alpine
command: ["-js", "-m", "8222"]
ports:
- "4222:4222"
redis:
image: redis:7-alpine
ports:
- "6381:6379"
3. Environment Variables (.env.example)
PORT=3011
NODE_ENV=development
DATABASE_URL=postgresql://ghasi:ghasi_dev@localhost:5434/scheduling_dev
REDIS_URL=redis://localhost:6381
NATS_URL=nats://localhost:4222
JWKS_URI=http://localhost:8080/realms/ghasi-dev/protocol/openid-connect/certs
AUDIT_NATS_SUBJECT=AUDIT.events
MODULE_KEY=ADMIN-SCHED
REMINDER_LEAD_TIME_HOURS=24
4. Common Commands
docker compose up -d
pnpm drizzle-kit migrate
pnpm seed:dev
pnpm dev:scheduling
pnpm test:unit --filter=scheduling
pnpm test:integration --filter=scheduling
pnpm test:coverage --filter=scheduling
5. Seed Data
| Seed | Description |
|---|---|
| 2 tenants | tenant-af, tenant-ae |
| 3 providers | With schedules covering Mon–Thu 08:00–17:00 (Asia/Kabul) |
| 30 slots | Mix of free, busy, blocked |
| 5 appointments | Planned, booked, arrived, fulfilled, cancelled states |
| 2 waitlist entries | One waiting, one fulfilled |