from apollo_utils.service.schemas.fields.datetime import DateTimeStringField from apollo_utils.service.schemas.fields.list import SplitUniqueListField from marshmallow import fields from server.schemas.base.nullable import IntOrNull from server.schemas.base.pagination import PaginationResultMixin, get_pagination_mixin from server.schemas.base.schemas import RequestSchema, Schema class V1FavoritesPlaylistsDetailed: class Headers(RequestSchema): app_slug = fields.String(required=True, data_key="X-App-Slug") user_id = fields.String(required=True, data_key="X-User-Id") class Request(RequestSchema, get_pagination_mixin(page_limit=50, max_limit=500)): tag_id = SplitUniqueListField(IntOrNull(allow_none=True, null_to="null")) class Response(Schema, PaginationResultMixin): class FavoritesPlaylistsItem(Schema): id = fields.String() country_code = fields.String() vendor = fields.String(attribute="dsp.dsp_id") name = fields.String() image_url = fields.String() owner = fields.String(attribute="owner.display_name", default=None) owner_user_name = fields.String(attribute="owner.username", default=None) owner_category_name = fields.String(attribute="owner.owner_category.name", default=None) personalized = fields.Boolean(attribute="is_personalised") created_at = DateTimeStringField() favorites_id = fields.Int() tag_id = fields.Integer(default=None) items = fields.List(fields.Nested(FavoritesPlaylistsItem))