from __future__ import annotations from sqlalchemy import select from sqlalchemy.orm import Session from app.models.approval import ApprovalRequest class ApprovalRepository: def __init__(self, db: Session) -> None: self.db = db def add(self, approval: ApprovalRequest) -> ApprovalRequest: self.db.add(approval) self.db.commit() self.db.refresh(approval) return approval def update(self, approval: ApprovalRequest) -> ApprovalRequest: self.db.add(approval) self.db.commit() self.db.refresh(approval) return approval def get_by_approval_id(self, approval_id: str) -> ApprovalRequest | None: statement = select(ApprovalRequest).where(ApprovalRequest.approval_id == approval_id) return self.db.execute(statement).scalar_one_or_none() def get_by_task_id(self, task_id: str) -> ApprovalRequest | None: statement = select(ApprovalRequest).where(ApprovalRequest.task_id == task_id) return self.db.execute(statement).scalar_one_or_none() def list_pending(self, approver_user_id: str | None = None) -> list[ApprovalRequest]: statement = select(ApprovalRequest).where(ApprovalRequest.approval_status == "PENDING") approvals = list(self.db.execute(statement).scalars()) if approver_user_id is None: return approvals return [item for item in approvals if approver_user_id in item.approver_user_ids_json]