Files
shveitechbot/repositories/order_items.py

61 lines
1.7 KiB
Python

from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, update
from typing import Optional
from db.models.orders import Order, OrderItem
class OrderItemRepository:
async def get_item_by_id(
self, session: AsyncSession, item_id: int
) -> Optional[OrderItem]:
stmt = select(OrderItem).where(OrderItem.id == item_id)
return await session.scalar(stmt)
async def get_items_by_order(
self, session: AsyncSession, order_id: int
) -> list[OrderItem]:
stmt = select(OrderItem).where(OrderItem.order_id == order_id)
result = await session.scalars(stmt)
return list(result)
async def get_item_by_order_and_product(
self, session: AsyncSession, *, order_id: int, product_id: int
) -> Optional[OrderItem]:
stmt = (
select(OrderItem)
.where(OrderItem.order_id == order_id)
.where(OrderItem.product_id == product_id)
)
return await session.scalar(stmt)
async def update_order_item_quantity(
self, session: AsyncSession, order_item_id: int, *, quantity: int = 0
):
stmt = (
update(OrderItem.__table__)
.where(OrderItem.id == order_item_id)
.values(quantity=quantity)
)
await session.execute(stmt)
await session.commit()
async def create_order_item(
self,
session: AsyncSession,
*,
order_id: int,
product_id: int,
quantity: int = 1,
) -> OrderItem:
order_item = OrderItem(
order_id=order_id, product_id=product_id, quantity=quantity
)
session.add(order_item)
await session.commit()
return order_item