"""PostgreSQL order repository.""" from contextlib import AbstractAsyncContextManager from dataclasses import dataclass from typing import Any from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from app.repositories.order.models import Order @dataclass(frozen=True) class OrderData: order_uuid: str payment_url: str price: int delivery_type: int tariff_code: int sender: dict[str, Any] recipient: dict[str, Any] from_location: dict[str, Any] to_location: dict[str, Any] packages: list[dict[str, Any]] services: list[dict[str, Any]] | None comment: str | None class OrderRepository: def __init__(self, session_factory: async_sessionmaker[AsyncSession]) -> None: self._session_factory = session_factory def session(self) -> AbstractAsyncContextManager[AsyncSession]: return self._session_factory.begin() async def create_order(self, session: AsyncSession, order_data: OrderData) -> Order: order = Order( order_uuid=order_data.order_uuid, payment_url=order_data.payment_url, price=order_data.price, delivery_type=order_data.delivery_type, tariff_code=order_data.tariff_code, sender=order_data.sender, recipient=order_data.recipient, from_location=order_data.from_location, to_location=order_data.to_location, packages=order_data.packages, services=order_data.services, comment=order_data.comment, ) session.add(order) await session.flush() await session.refresh(order) return order