invoices, order handling, db updates
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
from .orders import OrderRepository
|
||||
from .categories import CategoriesRepository
|
||||
from .products import ProductRepository
|
||||
from .invoices import InvoiceRepository
|
||||
|
||||
__all__ = ["OrderRepository", "CategoriesRepository", "ProductRepository"]
|
||||
__all__ = [
|
||||
"OrderRepository",
|
||||
"CategoriesRepository",
|
||||
"ProductRepository",
|
||||
"InvoiceRepository",
|
||||
]
|
||||
|
||||
45
repositories/invoices.py
Normal file
45
repositories/invoices.py
Normal file
@@ -0,0 +1,45 @@
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import select, update
|
||||
from db.models import Invoice
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from db.models.invoices import InvoiceStatus
|
||||
|
||||
|
||||
class InvoiceRepository:
|
||||
async def create_invoice(
|
||||
self,
|
||||
session: AsyncSession,
|
||||
*,
|
||||
amount: int,
|
||||
creator_id: int,
|
||||
inline_message_id: Optional[int] = None,
|
||||
status: InvoiceStatus = InvoiceStatus.PENDING,
|
||||
) -> Invoice:
|
||||
invoice = Invoice(
|
||||
creator_id=creator_id,
|
||||
amount=amount,
|
||||
status=status,
|
||||
inline_message_id=inline_message_id,
|
||||
)
|
||||
|
||||
session.add(invoice)
|
||||
await session.commit()
|
||||
return invoice
|
||||
|
||||
async def get_invoice_by_id(
|
||||
self, session: AsyncSession, invoice_id: int
|
||||
) -> Optional[Invoice]:
|
||||
stmt = select(Invoice).where(Invoice.id == invoice_id)
|
||||
return await session.scalar(stmt)
|
||||
|
||||
async def update_invoice_msg(
|
||||
self, session: AsyncSession, *, invoice_id: int, inline_message_id: int
|
||||
):
|
||||
stmt = (
|
||||
update(Invoice.__table__)
|
||||
.where(Invoice.id == invoice_id)
|
||||
.values(inline_message_id=inline_message_id)
|
||||
)
|
||||
await session.execute(stmt)
|
||||
@@ -2,7 +2,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import delete, func, select, update
|
||||
from typing import Optional
|
||||
|
||||
from db.models.orders import OrderItem
|
||||
from db.models.orders import Order, OrderItem, OrderStatus
|
||||
|
||||
|
||||
class OrderItemRepository:
|
||||
@@ -29,6 +29,19 @@ class OrderItemRepository:
|
||||
stmt = select(func.count(OrderItem.id)).where(OrderItem.order_id == order_id)
|
||||
return await session.scalar(stmt) or 0
|
||||
|
||||
async def get_items_count_by_customer(
|
||||
self, session: AsyncSession, customer: int
|
||||
) -> int:
|
||||
count = await session.scalar(
|
||||
select(func.count(OrderItem.id))
|
||||
.join(Order)
|
||||
.where(
|
||||
Order.customer == customer,
|
||||
Order.status == OrderStatus.DRAFT,
|
||||
)
|
||||
)
|
||||
return int(count)
|
||||
|
||||
async def get_item_by_order_and_product(
|
||||
self, session: AsyncSession, *, order_id: int, product_id: int
|
||||
) -> Optional[OrderItem]:
|
||||
|
||||
Reference in New Issue
Block a user