54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import select
|
|
|
|
from models import Deal
|
|
from repositories.base import BaseRepository
|
|
from schemas.deal import UpdateDealSchema, CreateDealSchema
|
|
|
|
|
|
class DealRepository(BaseRepository):
|
|
async def get_all(self, board_id: int) -> list[Deal]:
|
|
stmt = (
|
|
select(Deal)
|
|
.where(Deal.is_deleted.is_(False), Deal.board_id == board_id)
|
|
.order_by(Deal.lexorank)
|
|
)
|
|
result = await self.session.execute(stmt)
|
|
return list(result.scalars().all())
|
|
|
|
async def get_by_id(self, deal_id: int) -> Optional[Deal]:
|
|
stmt = select(Deal).where(Deal.id == deal_id, Deal.is_deleted.is_(False))
|
|
result = await self.session.execute(stmt)
|
|
return result.scalar_one_or_none()
|
|
|
|
async def create(self, data: CreateDealSchema) -> Deal:
|
|
deal_data = data.model_dump()
|
|
deal_data["created_at"] = datetime.now()
|
|
deal = Deal(**deal_data)
|
|
self.session.add(deal)
|
|
await self.session.commit()
|
|
await self.session.refresh(deal)
|
|
return deal
|
|
|
|
async def update(self, deal: Deal, data: UpdateDealSchema) -> Deal:
|
|
deal.lexorank = data.lexorank if data.lexorank else deal.lexorank
|
|
deal.name = data.name if data.name else deal.name
|
|
deal.status_id = data.status_id if data.status_id else deal.status_id
|
|
|
|
self.session.add(deal)
|
|
await self.session.commit()
|
|
await self.session.refresh(deal)
|
|
return deal
|
|
|
|
async def delete(self, deal: Deal, is_soft: bool):
|
|
if not is_soft:
|
|
await self.session.delete(deal)
|
|
await self.session.commit()
|
|
return
|
|
|
|
deal.is_deleted = True
|
|
self.session.add(deal)
|
|
await self.session.commit()
|