46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select
|
|
from typing import Optional
|
|
|
|
from db.models import Order, OrderStatus
|
|
|
|
|
|
class OrderRepository:
|
|
async def get_order_by_id(
|
|
self, session: AsyncSession, order_id: int
|
|
) -> Optional[Order]:
|
|
stmt = select(Order).where(Order.id == order_id)
|
|
return await session.scalar(stmt)
|
|
|
|
async def get_orders_by_user(
|
|
self, session: AsyncSession, customer: int
|
|
) -> list[Order]:
|
|
stmt = select(Order).where(Order.customer == customer)
|
|
result = await session.scalars(stmt)
|
|
|
|
return list(result)
|
|
|
|
async def get_draft_order_by_user(
|
|
self, session: AsyncSession, customer: int
|
|
) -> Optional[Order]:
|
|
stmt = (
|
|
select(Order)
|
|
.where(Order.customer == customer)
|
|
.where(Order.status == OrderStatus.DRAFT)
|
|
.limit(1)
|
|
)
|
|
return await session.scalar(stmt)
|
|
|
|
async def create_order(
|
|
self,
|
|
session: AsyncSession,
|
|
customer: int,
|
|
status: OrderStatus = OrderStatus.DRAFT,
|
|
):
|
|
order = Order(customer=customer, status=status)
|
|
|
|
session.add(order)
|
|
await session.commit()
|
|
|
|
return order
|