import datetime from sqlalchemy import select from models import User from models.deal import * from schemas.deal import * from services.base import BaseService class DealService(BaseService): async def _get_deal_by_id(self, deal_id) -> Deal: return await self.session.get(Deal, deal_id) async def create(self, request: DealCreateRequest) -> DealCreateResponse: deal = Deal( name=request.name, created_at=datetime.datetime.now(), current_status=DealStatus.AWAITING_ACCEPTANCE ) self.session.add(deal) await self.session.commit() return DealCreateResponse(ok=True) async def change_status(self, request: DealChangeStatusRequest, user: User) -> DealChangeStatusResponse: # Changing current status deal = await self._get_deal_by_id(request.deal_id) from_status = deal.current_status deal.current_status = request.new_status # Append status history status_change = DealStatusHistory( deal_id=request.deal_id, user_id=user.id, changed_at=datetime.datetime.now(), from_status=from_status, to_status=request.new_status ) self.session.add(status_change) await self.session.commit() return DealChangeStatusResponse(ok=True)