55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
from models import DealGroup, Deal
|
|
from repositories import DealRepository
|
|
from repositories.mixins import *
|
|
from schemas.deal_group import UpdateDealGroupSchema
|
|
|
|
|
|
class DealGroupRepository(
|
|
BaseRepository,
|
|
RepGetByIdMixin[DealGroup],
|
|
RepUpdateMixin[DealGroup, UpdateDealGroupSchema],
|
|
):
|
|
entity_class = DealGroup
|
|
|
|
async def create(self, deals: list[Deal], lexorank: str) -> DealGroup:
|
|
group = DealGroup(deals=deals, lexorank=lexorank)
|
|
self.session.add(group)
|
|
await self.session.flush()
|
|
await self.session.refresh(group)
|
|
group.name = "Группа ID: " + str(group.id)
|
|
await self.session.commit()
|
|
return group
|
|
|
|
async def update(self, entity: DealGroup, data: UpdateDealGroupSchema) -> DealGroup:
|
|
if data.status_id:
|
|
deal_repo = DealRepository(self.session)
|
|
deals = await deal_repo.get_by_group_id(entity.id)
|
|
for deal in deals:
|
|
await deal_repo.update_status(deal, data.status_id)
|
|
del data.status_id
|
|
return await self._apply_update_data_to_model(entity, data, True)
|
|
|
|
async def update_group_deals(
|
|
self, group_id: int, old_deals: list[Deal], new_deals: list[Deal]
|
|
):
|
|
old_set = set(old_deals)
|
|
new_set = set(new_deals)
|
|
deals_to_remove = old_set - new_set
|
|
deals_to_add = new_set - old_set
|
|
|
|
for deal in deals_to_remove:
|
|
deal.group_id = None
|
|
for deal in deals_to_add:
|
|
deal.group_id = group_id
|
|
|
|
self.session.add_all([*deals_to_remove, *deals_to_add])
|
|
await self.session.commit()
|
|
|
|
async def delete(self, group_id: int) -> None:
|
|
deal_repo = DealRepository(self.session)
|
|
deals = await deal_repo.get_by_group_id(group_id)
|
|
for deal in deals:
|
|
deal.is_deleted = True
|
|
self.session.add(deal)
|
|
await self.session.commit()
|