from datetime import date, datetime, timezone from models import ApprovalRequestCampaign from db import db from utils import session_utils from handlers.enums import CampaignWorkflowStatus class TransitionService: @staticmethod def delete_approval_request_campaign(campaign): db.session.query(ApprovalRequestCampaign).filter( ApprovalRequestCampaign.campaign_uuid == campaign.uuid, ApprovalRequestCampaign.is_deleted.is_(False), ApprovalRequestCampaign.completed_at.is_(None), ApprovalRequestCampaign.expiration_date > date.today() ).update( {ApprovalRequestCampaign.is_deleted: True} ) @staticmethod def complete_approval_request_campaign(campaign, target_status): campaign_approval_request = campaign.current_approval_request_campaign if campaign_approval_request and not campaign_approval_request.completed_at: campaign_approval_request.is_approved = target_status == CampaignWorkflowStatus.APPROVED.value campaign_approval_request.completed_at = datetime.now(timezone.utc) session_utils.session_flush()