"""Query class for the /participant-metrics endpoint.""" from marshmallow import fields, validate from analytics.connectors.snowflake import AbstractSnowflakeQuery from analytics.constants.ordering import ORDER_DIRECTIONS from analytics.queries.schema import QueryWithPermissionsSchema PARTICIPANT_METRICS_FIELDS = [ "id", "streams_1_day", "growth_percentage_1_day", "streams_7_days", "growth_percentage_7_days", "streams_28_days", "growth_percentage_28_days", "streams_183_days", "growth_percentage_183_days", "streams_365_days", "growth_percentage_365_days", "streams_all_time", ] class ParticipantMetricsQuerySchema(QueryWithPermissionsSchema): distributors = fields.List(fields.String, required=True) country_ids = fields.List(fields.String, load_default=[]) store_ids = fields.List(fields.Int, required=True) label_ids = fields.List(fields.Int, load_default=[]) subaccount_ids = fields.List(fields.Int, load_default=[]) fin_label_ids = fields.List(fields.String, load_default=[]) upper_profit_center_ids = fields.List(fields.String, load_default=[]) global_participant_ids = fields.List(fields.String, load_default=[]) parent_companies = fields.List(fields.String, load_default=[]) company_brands = fields.List(fields.String, load_default=[]) service_tier = fields.String(load_default=None, allow_none=True) is_feed_data_available = fields.Boolean(load_default=False) order_by = fields.String( load_default="streams_7_days", validate=validate.OneOf(PARTICIPANT_METRICS_FIELDS), ) order_dir = fields.String( load_default="DESC", validate=validate.OneOf(ORDER_DIRECTIONS), ) limit = fields.Integer(load_default=25) offset = fields.Integer(load_default=0) class ParticipantMetrics(AbstractSnowflakeQuery): query_schema = ParticipantMetricsQuerySchema filename = "participant/metrics.sql"