"""High-level logic for fetching entities and preparing for sync.""" from typing import List from src.common.models.metadata import InconsistencyReport from src.common.models.metadata import InconsistencyType from src.common.models.metadata import TrackArtistTable from src.common.models.metadata import TrackWriterTable from src.common.logic.art_relations import fetch_ar_records_to_sync from src.common.logic.report_fetch import filter_report_type from src.common.logic.report_fetch import get_ids_per_table from src.common.logic.report_fetch import encode_records def fetch_track_participations_events( report_list: List[InconsistencyReport] ) -> List[dict]: """Fetch Track Participations from AR and encode for sync. Args: report_list: List of InconsistencyReports. Return: List of records encoded for synchronisation. """ records = [] inconsistency_report = filter_report_type( report_list, InconsistencyType.BAD_TRACK_PARTICIPATIONS ) track_artist_ids = get_ids_per_table( inconsistency_report, TrackArtistTable ) track_writer_ids = get_ids_per_table( inconsistency_report, TrackWriterTable ) if track_artist_ids: records += fetch_ar_records_to_sync(TrackArtistTable, track_artist_ids) if track_writer_ids: records += fetch_ar_records_to_sync(TrackWriterTable, track_writer_ids) return encode_records(records)