from abc import ABC, abstractmethod from datetime import datetime from app.dsp.enums import DSPId from app.dsp.types import ( FollowedArtistsResult, PlaylistsResult, ProfileResult, RecentlyPlayedResult, SavedAlbumsResult, SavedTracksResult, TopArtistsResult, TopTracksResult, ) from app.fandata.types import FanRecord class DataSink(ABC): @abstractmethod def write_fans( self, *, fan: FanRecord, dsp_id: DSPId, profile: ProfileResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_top_artists( self, *, fan: FanRecord, dsp_id: DSPId, result: TopArtistsResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_top_tracks( self, *, fan: FanRecord, dsp_id: DSPId, result: TopTracksResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_recently_played( self, *, fan: FanRecord, dsp_id: DSPId, result: RecentlyPlayedResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_playlists( self, *, fan: FanRecord, dsp_id: DSPId, result: PlaylistsResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_saved_albums( self, *, fan: FanRecord, dsp_id: DSPId, result: SavedAlbumsResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_saved_tracks( self, *, fan: FanRecord, dsp_id: DSPId, result: SavedTracksResult, collected_at: datetime, ) -> None: ... @abstractmethod def write_fan_followed_artists( self, *, fan: FanRecord, dsp_id: DSPId, result: FollowedArtistsResult, collected_at: datetime, ) -> None: ... @abstractmethod def flush(self) -> None: ...