Skip to content

[Feature] Add database migration system #185

@d-oit

Description

@d-oit

Description

The database schema is applied raw on initialization with no version tracking or migration system. Any schema change requires manual intervention or data loss. There is no way to evolve the schema while preserving existing data.

Current State

  • ✅ Schema defined in public/db/schema.sql
  • ❌ No migration version tracking table
  • ❌ No migration scripts
  • ❌ No db:migrate CLI command
  • ❌ Schema changes require dropping and recreating the database

Proposed Implementation

  1. Add a schema_version table to track applied migrations
  2. Create a migration framework that runs pending migrations on app startup
  3. Number migrations sequentially (e.g., 001_initial.sql, 002_add_xxx.sql)
  4. Add db:migrate, db:rollback, db:status CLI commands
  5. Add database backup before migration
  6. Support both up and down migrations

Acceptance Criteria

  • schema_version table tracks applied migrations
  • Migrations run automatically on app startup
  • db:migrate CLI command available
  • db:backup CLI command creates a backup before migration
  • Rollback support for at least the last migration
  • Test for migration idempotency

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: backendBackend/data layerduplicateThis issue or pull request already existsfeatureNew feature requestpriority: highHigh priority

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions