from db import db from typing import List, Optional from sqlalchemy.orm import joinedload from models.connector import Connector, ConnectorStatus from utils.session_utils import session_add class ConnectorsRepository: def get_incomplete_connector_for_user_in_label(self, user_id: int, label_id: int, platform: str): return db.session.query(Connector).filter( Connector.owner_id == user_id, Connector.label_id == label_id, Connector.platform == platform, Connector.status == ConnectorStatus.INCOMPLETE.value ).one_or_none() def get_connector_by_external_id(self, external_id) -> Optional[Connector]: return db.session.query(Connector).filter(Connector.external_id == external_id).one_or_none() def create_connector(self, external_id: str, name: str, user_id: int, label_id: int, platform: str): connector = Connector() connector.external_id = external_id connector.name = name connector.label_id = label_id connector.owner_id = user_id connector.platform = platform connector.status = ConnectorStatus.INCOMPLETE.value session_add(connector) return connector def delete_connector(self, connector_id: int): db.session.query(Connector).filter(Connector.id == connector_id).delete() def update_connector(self, external_id: str): pass def get_label_connectors_without_incomplete(self, label_id: int): return ( db.session.query(Connector).filter( Connector.label_id == label_id, Connector.status != ConnectorStatus.INCOMPLETE.value ) .options( joinedload(Connector.owner) ) .all() )