Bedrud 文档

Bedrud uses GORM as its ORM, supporting both SQLite and PostgreSQL.

Supported Databases

  • SQLite: Default for development and small installs. File path via database.path.
  • PostgreSQL: Recommended for higher concurrency. Use discrete fields (host, port, user, password, dbname, sslmode) — not a URL in path.

See Configuration → Database.

SQLite File Layout

WAL mode is enabled for concurrent reads:

FilePurpose
*.dbMain database file
*.db-shmShared memory
*.db-walWrite-ahead log

These files are normal. SQLite recovers after crashes automatically.

Core Models

Located in server/internal/models/:

ModelFilePurpose
Useruser.goAccounts, roles (accesses), credentials
Roomroom.goMeetings; settings embedded with settings_ prefix
RoomParticipantroom.goJoin/presence records
Passkeypasskey.goWebAuthn credentials
UserPreferencesuser_preferences.goPer-user UI/media prefs
InviteTokeninvite_token.goGated registration tokens
ChatUploadchat_upload.goChat image metadata/quotas
Jobjob.goAsync queue jobs
Webhookwebhook.goOutbound webhook endpoints
SystemSettingssettings.goRuntime admin overrides (singleton)
VerificationEventverification_event.goEmail verification audit
Refresh / refresh tokensrefresh.goRefresh token storage
Recordingrecording.goPlanned recording records
Stats DTOsstats.go, queue_stats.goAggregates for admin overview

Custom Types: StringArray

StringArray in user.go implements sql.Scanner / driver.Valuer for cross-DB role arrays (native text[] on Postgres; serialized form on SQLite).

Foreign Keys

Composite keys (e.g. participants) and cascade constraints are applied in internal/database/migrations.go beyond plain AutoMigrate.

Repository Pattern

Handlers use repositories under internal/repository/:

  • user_repository, room_repository, passkey_repository
  • settings_repository, invite_token_repository, webhook_repository
  • user_preferences_repository, recording_repository, verification_event_repository
user, err := h.userRepo.GetByEmail(email)

Automatic Migrations

On startup (unless bedrud run --skip-migrate), GORM AutoMigrate creates/updates tables from models. Manual SQL helpers live in internal/database/migrations.go.

CLI: bedrud db migrate / bedrud db status.