Cart rendering, bug fixes with cart adding/rming

This commit is contained in:
2026-02-08 19:15:48 +07:00
parent e8a61c05b3
commit 6409d66dfd
12 changed files with 252 additions and 38 deletions

View File

@@ -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()

View File

@@ -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)