feat: database migration

This commit is contained in:
Junyan Qin
2025-04-13 20:50:13 +08:00
parent 854effc43e
commit edc7f81486
6 changed files with 123 additions and 6 deletions

View File

@@ -0,0 +1,38 @@
from __future__ import annotations
import typing
import abc
from ..core import app
preregistered_db_migrations: list[typing.Type[DBMigration]] = []
def migration_class(number: int):
"""迁移类装饰器"""
def wrapper(cls: typing.Type[DBMigration]) -> typing.Type[DBMigration]:
cls.number = number
preregistered_db_migrations.append(cls)
return cls
return wrapper
class DBMigration(abc.ABC):
"""数据库迁移"""
number: int
"""迁移号"""
def __init__(self, ap: app.Application):
self.ap = ap
@abc.abstractmethod
async def upgrade(self):
"""升级"""
pass
@abc.abstractmethod
async def downgrade(self):
"""降级"""
pass