"""TransferWise Profile Model.""" from datetime import datetime from typing import Optional from sqlalchemy import Enum from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql import func from collaborator.connectors import mysql from collaborator.constants.transferwise_profile import TransferwiseProfileStatus class TransferwiseProfile(mysql.BaseModel): """Encapsulates TransferWise Profile data.""" __tablename__ = "transferwise_profile" transferwise_profile_id: Mapped[int] = mapped_column("id", primary_key=True) vendor_id: Mapped[int] subaccount_id: Mapped[Optional[int]] profile_id: Mapped[int] access_token: Mapped[str] refresh_token: Mapped[str] refresh_token_created_at: Mapped[datetime] = mapped_column(default=func.now()) status: Mapped[TransferwiseProfileStatus] = mapped_column( Enum(TransferwiseProfileStatus), default=TransferwiseProfileStatus.UNVERIFIED, ) active: Mapped[bool] = mapped_column(default=True) deleted_by: Mapped[Optional[str]] deleted_date: Mapped[Optional[datetime]] def to_dict(self) -> dict: """Get dictionary representation of model. This excludes sensitive token information Returns: dict """ deleted_date = self.deleted_date.isoformat() if self.deleted_date else None return { "id": self.transferwise_profile_id, "vendor_id": self.vendor_id, "subaccount_id": self.subaccount_id, "profile_id": self.profile_id, "access_token": self.access_token, "refresh_token": self.refresh_token, "refresh_token_created_at": self.refresh_token_created_at.isoformat(), "status": self.status, "active": self.active, "deleted_by": self.deleted_by, "deleted_date": deleted_date, }