36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from typing import Annotated
|
|
from uuid import UUID
|
|
|
|
from litestar.contrib.sqlalchemy.base import UUIDAuditBase
|
|
from litestar.contrib.sqlalchemy.dto import SQLAlchemyDTO
|
|
from litestar.dto import DTOConfig, Mark, dto_field
|
|
from sqlalchemy import ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.domain.city import City
|
|
from app.lib import service
|
|
from app.lib.filter_repository import FilterRepository
|
|
|
|
|
|
class User(UUIDAuditBase):
|
|
__tablename__ = "users" # type: ignore[assignment]
|
|
|
|
first_name: Mapped[str]
|
|
last_name: Mapped[str]
|
|
city_id: Mapped[UUID] = mapped_column(ForeignKey("cities.id"))
|
|
city: Mapped[City] = relationship(lazy="joined", info=dto_field(Mark.READ_ONLY))
|
|
|
|
|
|
class Repository(FilterRepository[User]):
|
|
model_type = User
|
|
|
|
|
|
class Service(service.Service[User]):
|
|
repository_type = Repository
|
|
|
|
|
|
write_config = DTOConfig(exclude={"id", "created_at", "updated_at"})
|
|
read_config = DTOConfig(exclude={"city"})
|
|
UserWriteDTO = SQLAlchemyDTO[Annotated[User, write_config]]
|
|
UserReadDTO = SQLAlchemyDTO[Annotated[User, read_config]]
|