from apollo_utils.core.constants.dsp import DSP_SPOTIFY_APPLE from apollo_utils.service.schemas.fields.datetime import DateStringField from apollo_utils.service.schemas.mixins.dsp import get_dsp_mixin from apollo_utils.service.schemas.mixins.isrc import IsrcRequiredMixin from marshmallow import fields from server.schemas.base.chart import ChartBreakdownDefaultDailyMixin from server.schemas.base.schemas import RequestSchema, Schema class TracksCharts: class Request( IsrcRequiredMixin, get_dsp_mixin(DSP_SPOTIFY_APPLE, required=True), ChartBreakdownDefaultDailyMixin, RequestSchema, ): chart_date = fields.Date(data_key="date", missing=None) class Response(Schema): class ChartItem(Schema): class ChartMeta(Schema): class Region(Schema): code = fields.String() name = fields.String() rank = fields.Integer() chart_id = fields.String() name = fields.String() total_positions = fields.Integer() country_code = fields.String() type = fields.String() breakdown = fields.String() rank = fields.Integer() region = fields.Nested(Region) class Metrics(Schema): date = DateStringField() previous_date = DateStringField() is_entry = fields.Boolean() position = fields.Integer() isrc_position = fields.Integer() previous_position = fields.Integer() trend = fields.Integer() date_streams = fields.Integer() class LifetimeMetrics(Schema): earliest_position = fields.Integer() earliest_position_date = DateStringField() latest_position = fields.Integer() latest_position_date = DateStringField() max_position = fields.Integer() max_position_date = DateStringField() min_position = fields.Integer() min_position_date = DateStringField() total_days = fields.Integer() chart_meta = fields.Nested(ChartMeta) metrics = fields.Nested(Metrics, default=None) lifetime_metrics = fields.Nested(LifetimeMetrics, default=None) items = fields.List(fields.Nested(ChartItem))