fix(db): declare locale on CommandConfig model + defensive migration
Release / release (push) Successful in 1m7s

Startup was crashing on fresh databases because:
- init_db() calls SQLModel.metadata.create_all(), which builds tables
  from the model classes. CommandConfig didn't declare `locale`, so
  the created command_config table lacked the column.
- The seeder then issued INSERTs that included locale='en', causing
  `OperationalError: table command_config has no column named locale`.

The legacy migration #6 in migrate_schema creates command_config WITH
locale via raw SQL, so upgraded databases worked. Only fresh installs
broke.

Fix:
- Add `locale: str = Field(default='en')` to CommandConfig model so
  create_all() produces a consistent schema.
- Add a defensive ALTER TABLE ... ADD COLUMN locale in migrate_schema's
  else-branch, so any existing command_config table missing the column
  (from a broken v0.1.0 install) is backfilled on next startup.
This commit is contained in:
2026-04-21 20:35:21 +03:00
parent f27fa42b87
commit 293614d667
2 changed files with 8 additions and 0 deletions
@@ -383,6 +383,7 @@ class CommandConfig(SQLModel, table=True):
name: str
icon: str = Field(default="")
enabled_commands: list[str] = Field(default_factory=list, sa_column=Column(JSON))
locale: str = Field(default="en")
response_mode: str = Field(default="media") # "media" or "text"
default_count: int = Field(default=5)
rate_limits: dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON))