from abc import ABC, abstractmethod from typing import Any from resonance_engine.dsp.enums import DSPId from resonance_engine.fandata.types import FanRecord class DataSink(ABC): @abstractmethod def write_fans( self, *, fan: FanRecord, dsp_id: DSPId, data: dict[str, Any], ) -> None: ... @abstractmethod def write_fan_top_artists( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_top_tracks( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_recently_played( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_playlists( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_saved_albums( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_saved_tracks( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def write_fan_followed_artists( self, *, fan: FanRecord, dsp_id: DSPId, items: list[dict[str, Any]], ) -> None: ... @abstractmethod def flush(self) -> None: ...