Добавлено сохранение заказов в postgres
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user