from enum import Enum from typing import List from sqlalchemy import func from db import db class Connector(db.Model): """Fivetran connector model""" __tablename__ = "Connector" id = db.Column(db.BigInteger, primary_key=True) external_id = db.Column(db.String, unique=True, nullable=False) name = db.Column(db.String, nullable=False) platform = db.Column(db.String, nullable=False) status = db.Column(db.Integer, nullable=False) created_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) updated_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) last_synced_at = db.Column(db.TIMESTAMP(timezone=True), nullable=True) owner_id = db.Column(db.Integer, db.ForeignKey("User.id"), nullable=False) label_id = db.Column(db.Integer, db.ForeignKey("Label.id"), nullable=False) owner = db.relationship("User", back_populates="connectors") label = db.relationship("Label", back_populates="connectors") ad_accounts = db.relationship("AdAccount", back_populates="connector") class ConnectorStatus(Enum): INCOMPLETE = 0 ACTIVE = 1 PAUSED = 2 RECONNECT = 3 PENDING = 4 class ConnectorPlatforms(Enum): GOOGLE_ADS = "google_ads" FACEBOOK_ADS = "facebook_ads" TIKTOK_ADS = "tiktok_ads" @staticmethod def all_values() -> List[int]: return list(map(lambda c: c.value, ConnectorPlatforms))