from apollo_utils.service.schemas.fields.datetime import DateTimeStringField from apollo_utils.service.schemas.mixins.date import get_date_range_mixin from apollo_utils.service.schemas.mixins.isrc import IsrcListRequiredMixin from marshmallow import fields from server.schemas.base.schemas import RequestSchema, Schema class V1PlaylistsCommonPosition: """(AP) track in playlist position change common request schema for apple/spotify""" class Request( RequestSchema, IsrcListRequiredMixin, get_date_range_mixin(start_field="startDate", end_field="endDate") ): pass class Response(Schema): """(AP) track in playlist position change common response schema for apple/spotify Has a legacy response structure: { "series": [ { "entries": { "trackCount": playlist tracks count for particular date, "date": "2022-09-08", "position": position of a track for particular day }, } ] } """ class NestedItem(Schema): class ItemNestedMetrics(Schema): date = DateTimeStringField() position = fields.Integer(attribute="current", dump_default=None) num_tracks = fields.Integer(data_key="trackCount", dump_default=None) entries = fields.List(fields.Nested(ItemNestedMetrics)) series = fields.List(fields.Nested(NestedItem()))