Implement migration to remove created_at timestamp from Orgs that already has one, bumping db v1.
This commit is contained in:
@@ -18,6 +18,7 @@ import aiofiles
|
||||
import jsondiff
|
||||
import msgspec
|
||||
|
||||
from paskia.db.migrations import apply_migrations
|
||||
from paskia.db.structs import DB, SessionContext
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
@@ -172,10 +173,19 @@ class JsonlStore:
|
||||
try:
|
||||
data_dict = await load_jsonl(self.db_path)
|
||||
if data_dict:
|
||||
# Apply schema migrations
|
||||
migrated = apply_migrations(data_dict)
|
||||
|
||||
decoder = msgspec.json.Decoder(DB)
|
||||
self.db = decoder.decode(msgspec.json.encode(data_dict))
|
||||
self.db._store = self
|
||||
self._previous_builtins = data_dict
|
||||
|
||||
# Persist migration
|
||||
if migrated:
|
||||
with self.transaction("migrate"):
|
||||
pass # Trigger change detection
|
||||
await self.flush()
|
||||
except ValueError:
|
||||
if self.db_path.exists():
|
||||
raise
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
Database schema migrations.
|
||||
|
||||
Migrations are applied during database load based on the version field.
|
||||
Each migration should be idempotent and only run when needed.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def apply_migrations(data_dict: dict) -> bool:
|
||||
"""Apply any pending schema migrations to the database dictionary.
|
||||
|
||||
Args:
|
||||
data_dict: The raw database dictionary loaded from JSONL
|
||||
|
||||
Returns:
|
||||
True if any migrations were applied, False otherwise
|
||||
"""
|
||||
db_version = data_dict.get("v", 0)
|
||||
migrated = False
|
||||
|
||||
if db_version == 0:
|
||||
# Migration v0 -> v1: Remove created_at from orgs (field removed from schema)
|
||||
if "orgs" in data_dict:
|
||||
for org_data in data_dict["orgs"].values():
|
||||
org_data.pop("created_at", None)
|
||||
data_dict["v"] = 1
|
||||
migrated = True
|
||||
_logger.info("Applied schema migration: v0 -> v1 (removed org.created_at)")
|
||||
|
||||
return migrated
|
||||
Reference in New Issue
Block a user