Cart rendering, bug fixes with cart adding/rming
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, update
|
||||
from sqlalchemy import delete, func, select, update
|
||||
from typing import Optional
|
||||
|
||||
from db.models.orders import Order, OrderItem
|
||||
from db.models.orders import OrderItem
|
||||
|
||||
|
||||
class OrderItemRepository:
|
||||
@@ -13,13 +13,22 @@ class OrderItemRepository:
|
||||
return await session.scalar(stmt)
|
||||
|
||||
async def get_items_by_order(
|
||||
self, session: AsyncSession, order_id: int
|
||||
self, session: AsyncSession, *, order_id: int, limit: int, offset: int = 0
|
||||
) -> list[OrderItem]:
|
||||
stmt = select(OrderItem).where(OrderItem.order_id == order_id)
|
||||
stmt = (
|
||||
select(OrderItem)
|
||||
.where(OrderItem.order_id == order_id)
|
||||
.limit(limit)
|
||||
.offset(offset)
|
||||
)
|
||||
result = await session.scalars(stmt)
|
||||
|
||||
return list(result)
|
||||
|
||||
async def get_items_count(self, session: AsyncSession, *, order_id: int) -> int:
|
||||
stmt = select(func.count(OrderItem.id)).where(OrderItem.order_id == order_id)
|
||||
return await session.scalar(stmt) or 0
|
||||
|
||||
async def get_item_by_order_and_product(
|
||||
self, session: AsyncSession, *, order_id: int, product_id: int
|
||||
) -> Optional[OrderItem]:
|
||||
@@ -58,3 +67,9 @@ class OrderItemRepository:
|
||||
await session.commit()
|
||||
|
||||
return order_item
|
||||
|
||||
async def delete_item(self, session: AsyncSession, item_id: int):
|
||||
stmt = delete(OrderItem.__table__).where(OrderItem.id == item_id)
|
||||
|
||||
await session.execute(stmt)
|
||||
await session.commit()
|
||||
|
||||
@@ -2,7 +2,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select
|
||||
from typing import Optional
|
||||
|
||||
from db.models import Order, OrderStatus
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from db.models import Order, OrderStatus, OrderItem
|
||||
|
||||
|
||||
class OrderRepository:
|
||||
@@ -28,6 +30,7 @@ class OrderRepository:
|
||||
.where(Order.customer == customer)
|
||||
.where(Order.status == OrderStatus.DRAFT)
|
||||
.limit(1)
|
||||
.options(selectinload(Order.items).selectinload(OrderItem.product))
|
||||
)
|
||||
return await session.scalar(stmt)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user