172 lines
4.3 KiB
Python
172 lines
4.3 KiB
Python
from api.v1.schemas.common import GenreArtistMap, IntegrationStatus
|
|
from api.v1.schemas.weekly_exploration import WeeklyExplorationSection
|
|
from infrastructure.msgspec_fastapi import AppStruct
|
|
|
|
|
|
class HomeArtist(AppStruct):
|
|
name: str
|
|
mbid: str | None = None
|
|
image_url: str | None = None
|
|
listen_count: int | None = None
|
|
in_library: bool = False
|
|
source: str | None = None
|
|
|
|
|
|
class HomeAlbum(AppStruct):
|
|
name: str
|
|
mbid: str | None = None
|
|
artist_name: str | None = None
|
|
artist_mbid: str | None = None
|
|
image_url: str | None = None
|
|
release_date: str | None = None
|
|
listen_count: int | None = None
|
|
in_library: bool = False
|
|
requested: bool = False
|
|
source: str | None = None
|
|
|
|
|
|
class HomeTrack(AppStruct):
|
|
name: str
|
|
mbid: str | None = None
|
|
artist_name: str | None = None
|
|
artist_mbid: str | None = None
|
|
album_name: str | None = None
|
|
listen_count: int | None = None
|
|
listened_at: str | None = None
|
|
image_url: str | None = None
|
|
|
|
|
|
class HomeGenre(AppStruct):
|
|
name: str
|
|
listen_count: int | None = None
|
|
artist_count: int | None = None
|
|
artist_mbid: str | None = None
|
|
|
|
|
|
class HomeSection(AppStruct):
|
|
title: str
|
|
type: str
|
|
items: list[HomeArtist | HomeAlbum | HomeTrack | HomeGenre] = []
|
|
source: str | None = None
|
|
fallback_message: str | None = None
|
|
connect_service: str | None = None
|
|
|
|
|
|
class ServicePrompt(AppStruct):
|
|
service: str
|
|
title: str
|
|
description: str
|
|
icon: str
|
|
color: str
|
|
features: list[str] = []
|
|
|
|
|
|
class HomeIntegrationStatus(IntegrationStatus):
|
|
localfiles: bool = False
|
|
|
|
|
|
class DiscoverPreview(AppStruct):
|
|
seed_artist: str
|
|
seed_artist_mbid: str
|
|
items: list[HomeArtist] = []
|
|
|
|
|
|
class HomeResponse(AppStruct):
|
|
recently_added: HomeSection | None = None
|
|
library_artists: HomeSection | None = None
|
|
library_albums: HomeSection | None = None
|
|
recommended_artists: HomeSection | None = None
|
|
trending_artists: HomeSection | None = None
|
|
popular_albums: HomeSection | None = None
|
|
recently_played: HomeSection | None = None
|
|
top_genres: HomeSection | None = None
|
|
genre_list: HomeSection | None = None
|
|
fresh_releases: HomeSection | None = None
|
|
favorite_artists: HomeSection | None = None
|
|
your_top_albums: HomeSection | None = None
|
|
weekly_exploration: WeeklyExplorationSection | None = None
|
|
service_prompts: list[ServicePrompt] = []
|
|
integration_status: HomeIntegrationStatus | None = None
|
|
genre_artists: GenreArtistMap = {}
|
|
genre_artist_images: GenreArtistMap = {}
|
|
discover_preview: DiscoverPreview | None = None
|
|
service_status: dict[str, str] | None = None
|
|
|
|
|
|
class GenreLibrarySection(AppStruct):
|
|
artists: list[HomeArtist] = []
|
|
albums: list[HomeAlbum] = []
|
|
artist_count: int = 0
|
|
album_count: int = 0
|
|
|
|
|
|
class GenrePopularSection(AppStruct):
|
|
artists: list[HomeArtist] = []
|
|
albums: list[HomeAlbum] = []
|
|
has_more_artists: bool = False
|
|
has_more_albums: bool = False
|
|
|
|
|
|
class GenreDetailResponse(AppStruct):
|
|
genre: str
|
|
library: GenreLibrarySection | None = None
|
|
popular: GenrePopularSection | None = None
|
|
artists: list[HomeArtist] = []
|
|
total_count: int | None = None
|
|
|
|
|
|
class TrendingTimeRange(AppStruct):
|
|
range_key: str
|
|
label: str
|
|
featured: HomeArtist | None = None
|
|
items: list[HomeArtist] = []
|
|
total_count: int = 0
|
|
|
|
|
|
class TrendingArtistsResponse(AppStruct):
|
|
this_week: TrendingTimeRange
|
|
this_month: TrendingTimeRange
|
|
this_year: TrendingTimeRange
|
|
all_time: TrendingTimeRange
|
|
|
|
|
|
class PopularTimeRange(AppStruct):
|
|
range_key: str
|
|
label: str
|
|
featured: HomeAlbum | None = None
|
|
items: list[HomeAlbum] = []
|
|
total_count: int = 0
|
|
|
|
|
|
class PopularAlbumsResponse(AppStruct):
|
|
this_week: PopularTimeRange
|
|
this_month: PopularTimeRange
|
|
this_year: PopularTimeRange
|
|
all_time: PopularTimeRange
|
|
|
|
|
|
class TrendingArtistsRangeResponse(AppStruct):
|
|
range_key: str
|
|
label: str
|
|
items: list[HomeArtist] = []
|
|
offset: int = 0
|
|
limit: int = 25
|
|
has_more: bool = False
|
|
|
|
|
|
class PopularAlbumsRangeResponse(AppStruct):
|
|
range_key: str
|
|
label: str
|
|
items: list[HomeAlbum] = []
|
|
offset: int = 0
|
|
limit: int = 25
|
|
has_more: bool = False
|
|
|
|
|
|
class GenreArtistResponse(AppStruct):
|
|
artist_mbid: str | None = None
|
|
|
|
|
|
class GenreArtistsBatchResponse(AppStruct):
|
|
genre_artists: dict[str, str | None] = {}
|