"""VendorAgreement Persister. Handles doing CRUD operations on the vendor_agreement table. """ from typing import Tuple from sqlalchemy.orm.session import Session from collaborator.connectors import mysql from collaborator.models.rds.vendor_agreement import VendorAgreement from collaborator.utils.typing import Account, User class VendorAgreementPersister: """Handles high level operations for vendor agreements.""" @classmethod @mysql.db_session def create_vendor_agreement( cls, account: Account, user: User, session: Session ) -> Tuple[dict, bool]: """Create a vendor agreement. Args: account (Account): Account which is creating the vendor agreement user (User): the user's which is creating the vendor agreement session (sqlalchemy.orm.session.Session): database session. Returns: Response: the newly created vendor agreement, created: a boolean representing whether the agreement was created """ result = session.query(VendorAgreement).filter_by(vendor_id=account.id).first() if result: return result.to_dict(), False vendor_agreement = VendorAgreement(vendor_id=account.id, user_id=user.id) session.add(vendor_agreement) session.commit() return vendor_agreement.to_dict(), True @classmethod @mysql.db_session def get_vendor_agreement_for_account( cls, account: Account, session: Session ) -> dict | None: """Get a vendor agreement based on the account id. Args: account (Account): Account to limit by. session (sqlalchemy.orm.session.Session): database session. Returns: Response: the vendor agreement for the requested vendor """ result = session.query(VendorAgreement).filter_by(vendor_id=account.id).first() return result.to_dict() if result else None