Files
2023-09-14 19:57:47 +02:00

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]]