refactor: migrate to keyword-based repository config, add nested transactions and tests

This commit is contained in:
2026-08-14 19:58:32 +03:00
parent 3d85c2b5dd
commit 7abb513b30
22 changed files with 658 additions and 324 deletions

View File

@@ -1,9 +1,16 @@
import asyncio
from sqlalchemy.orm import joinedload
from sqlmodel import Field, Relationship
from metaorm import BaseRepository, BaseTable, DatabaseSettings, RepositoriesContainer
from metaorm import (
BaseFilter,
BaseRepository,
BaseTable,
Field,
Relationship,
RepositoriesContainer,
RepositorySettings,
)
class AuthorTable(BaseTable, table=True):
@@ -23,18 +30,25 @@ class BookTable(BaseTable, table=True):
author: AuthorTable = Relationship(back_populates="books")
class BookRepository(BaseRepository):
def get_db_table(self) -> type[BookTable]:
return BookTable
class BookFilter(BaseFilter):
title: str | None = None
author_id: int | None = None
class AuthorRepository(BaseRepository):
def get_db_table(self) -> type[AuthorTable]:
return AuthorTable
class AuthorFilter(BaseFilter):
name: str | None = None
class BookRepository(BaseRepository, table=BookTable, filter_=BookFilter):
pass
class AuthorRepository(BaseRepository, table=AuthorTable, filter_=AuthorFilter):
pass
async def main() -> None:
settings = DatabaseSettings(dsn="sqlite+aiosqlite:///:memory:")
settings = RepositorySettings(dsn="sqlite+aiosqlite:///:memory:")
container = RepositoriesContainer(settings=settings)
author_repo = AuthorRepository(container=container)