from typing import List from sqlalchemy import and_ from models import Polymorphable, Artist, Label from models.project_entity_type import ProjectEntityType from db import db from models.projects import Project, ProjectTargetItem class ArtistProjectsRepository: def get_artist_projects_labels(self, artist_external_id: str) -> List[Label]: return ( db.session.query(Label) .join(Project, Project.label_id == Label.id) .join( ProjectTargetItem, and_( ProjectTargetItem.project_id == Project.id, ProjectTargetItem.is_deleted.is_(False), ProjectTargetItem.entity_type == ProjectEntityType.PRIMARY_ARTIST.value, ), ) .join(Polymorphable, Polymorphable.id == ProjectTargetItem.entity_id) .join(Artist, Polymorphable.id == Artist.id) .filter(Artist.external_id == artist_external_id, Project.is_deleted.is_(False)) .all() ) def get_artist_unclaimed_projects_labels(self, artist_external_id: str) -> List[Label]: return ( db.session.query(Label) .join(Project, Project.label_id == Label.id) .join( ProjectTargetItem, and_( ProjectTargetItem.project_id == Project.id, ProjectTargetItem.is_deleted.is_(False), ProjectTargetItem.entity_type == ProjectEntityType.PRIMARY_ARTIST.value, ), ) .join(Polymorphable, Polymorphable.id == ProjectTargetItem.entity_id) .join(Artist, Polymorphable.id == Artist.id) .filter( Artist.external_id == artist_external_id, Project.is_deleted.is_(False), Project.is_claimed.is_(False) ) .all() )