"""Data models for Apple Music.""" from typing import Dict from typing import List from typing import Optional from pydantic import BaseModel from src.common.types import ApiRequestType from src.common.types import BaseAPIRequest class AppleMusicSearchAlbumByUPCRequestPayload(BaseModel): """Request payload model for Apple Music Search by UPC.""" product_id: int upc: int vendor_id: int subaccount_id: int class AppleMusicSearchAlbumByUPCRequest(BaseModel, BaseAPIRequest): """Request model for Apple Music Search by UPC.""" request_type: ApiRequestType payload: AppleMusicSearchAlbumByUPCRequestPayload @property def endpoint(self) -> str: """Store API endpoint.""" return '/catalog/us/albums' @property def endpoint_params(self) -> Dict: """Get API endpoint parameters.""" return {'filter[upc]': self.payload.upc} class AppleMusicArtistAttributes(BaseModel): """Apple Music API Artists.Attributes object.""" name: str class AppleMusicArtist(BaseModel): """Apple Music API Artists object.""" id: str attributes: Optional[AppleMusicArtistAttributes] = None class AppleMusicAlbumsRelationshipsData(BaseModel): """Apple Music API Albums.Relationships.AlbumsArtistsRelationship obj.""" data: List[AppleMusicArtist] class AppleMusicAlbumsRelationships(BaseModel): """Apple Music API Albums.Relationships object.""" artists: AppleMusicAlbumsRelationshipsData class AppleMusicAlbums(BaseModel): """Apple Music API Albums object.""" id: str relationships: AppleMusicAlbumsRelationships class AppleMusicAlbumsResponse(BaseModel): """Apple Music API AlbumsResponse object.""" data: List[AppleMusicAlbums] class AppleMusicGetArtistForAlbumPayload(BaseModel): """Request payload model for Apple Music Search by UPC.""" id: str product_id: int upc: int vendor_id: int subaccount_id: int class AppleMusicGetArtistForAlbumRequest(BaseModel, BaseAPIRequest): """Request model for AppleMusic Artist for album.""" request_type: ApiRequestType payload: AppleMusicGetArtistForAlbumPayload @property def endpoint(self) -> str: """Store API endpoint.""" return f'/catalog/us/artists/{self.payload.id}' @property def endpoint_params(self) -> Dict: """Get API endpoint parameters.""" return {} class AppleMusicArtistsResponse(BaseModel): """Apple Music API ArtistsResponse object.""" data: List[AppleMusicArtist] class AppleMusicAlbumArtist(BaseModel): """Apple Music artist model.""" id: str name: str class AppleMusicAlbumArtistMessage(BaseModel): """Apple Music get artist response model.""" api_request: AppleMusicGetArtistForAlbumRequest artist: AppleMusicAlbumArtist