Architecture
Database
PostgreSQL schema, sqlc queries, and migration strategy.
Overview
Chelar uses PostgreSQL 16 hosted on Supabase. All queries are generated by sqlc for type safety.
Key Tables
| Table | Purpose |
|---|---|
tenants | Tenant records (ID, slug, plan, runtime, status) |
channels | Connected messaging channels per tenant |
sessions | NextAuth session store |
users | OAuth user accounts |
accounts | OAuth provider links |
Query Layer
- Queries defined in:
api/internal/db/queries/ - Generated Go code in:
api/internal/db/sqlc/ - Connection via pgx/v5 pool
Regenerate after query changes: cd api && sqlc generate
Migrations
Migrations live in api/internal/db/migrations/ and are applied manually via goose:
goose -dir api/internal/db/migrations postgres "$DATABASE_URL" upConventions
- No ORMs — raw SQL via sqlc only
- Every query gets a descriptive name (e.g.,
GetTenantBySlug,ListChannelsByTenantID) - Migrations include brief comments per table/column group