39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
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]
|