81 lines
1.9 KiB
Python
81 lines
1.9 KiB
Python
from pydantic import BaseModel
|
|
|
|
from metaorm import BaseFilter, BaseRepository, BaseTable, Field, Relationship
|
|
|
|
|
|
class User(BaseModel):
|
|
id: int | None = None
|
|
name: str
|
|
email: str
|
|
|
|
|
|
class UserTable(BaseTable[User], table=True):
|
|
__tablename__ = "users"
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
name: str
|
|
email: str = Field(unique=True)
|
|
|
|
@classmethod
|
|
def from_item(cls, item: User) -> "UserTable":
|
|
return cls(id=item.id, name=item.name, email=item.email)
|
|
|
|
def to_item(self) -> User:
|
|
return User(id=self.id, name=self.name, email=self.email)
|
|
|
|
|
|
class UserFilter(BaseFilter):
|
|
name: str | None = None
|
|
email: str | None = None
|
|
|
|
|
|
class UserRepository(BaseRepository, table=UserTable, filter_=UserFilter, dto=User):
|
|
pass
|
|
|
|
|
|
class ProductTable(BaseTable, table=True):
|
|
__tablename__ = "products"
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
name: str
|
|
price: float
|
|
|
|
|
|
class ProductFilter(BaseFilter):
|
|
name: str | None = None
|
|
price: int | None = None
|
|
|
|
|
|
class ProductRepository(BaseRepository, table=ProductTable, filter_=ProductFilter):
|
|
pass
|
|
|
|
|
|
class AuthorTable(BaseTable, table=True):
|
|
__tablename__ = "authors"
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
name: str
|
|
books: list["BookTable"] = Relationship(back_populates="author")
|
|
|
|
|
|
class BookTable(BaseTable, table=True):
|
|
__tablename__ = "books"
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
title: str
|
|
author_id: int = Field(foreign_key="authors.id")
|
|
author: AuthorTable = Relationship(back_populates="books")
|
|
|
|
|
|
class AuthorFilter(BaseFilter):
|
|
name: str | None = None
|
|
|
|
|
|
class BookFilter(BaseFilter):
|
|
title: str | None = None
|
|
author_id: int | None = None
|
|
|
|
|
|
class AuthorRepository(BaseRepository, table=AuthorTable, filter_=AuthorFilter):
|
|
pass
|
|
|
|
|
|
class BookRepository(BaseRepository, table=BookTable, filter_=BookFilter):
|
|
pass
|