from sqlalchemy import select from sqlalchemy.orm import selectinload from models import DealService as DealServiceModel from models.deal_group import DealGroup from schemas.deal import * from services.base import BaseService class DealGroupService(BaseService): async def get_deals_by_group_id(self, group_id) -> list[Deal]: group: DealGroup | None = await self.session.scalar( select(DealGroup) .where(DealGroup.id == group_id) .options( selectinload(DealGroup.deals).selectinload(Deal.products).selectinload(DealProduct.services), selectinload(DealGroup.deals).selectinload(Deal.products) .selectinload(DealProduct.product).selectinload(Product.barcodes), selectinload(DealGroup.deals).selectinload(Deal.services).selectinload(DealServiceModel.service), selectinload(DealGroup.deals).selectinload(Deal.status_history), selectinload(DealGroup.deals).selectinload(Deal.group).selectinload(DealGroup.deals), selectinload(DealGroup.deals).joinedload(Deal.client), selectinload(DealGroup.deals).joinedload(Deal.shipping_warehouse), ) ) return group.deals if group else [] async def complete_group(self, group_id: int) -> list[Deal]: deals = await self.get_deals_by_group_id(group_id) for deal in deals: deal.is_completed = True return deals async def delete_group(self, group_id: int) -> None: deals = await self.get_deals_by_group_id(group_id) for deal in deals: deal.is_deleted = True await self.session.commit()