"""Query classes for the /product-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 TOP_METRICS_FIELDS = [ "product_id", "upc", "streams_1_day", "growth_percentage_1_day", "streams_7_days", "growth_percentage_7_days", "streams_28_days", "growth_percentage_28_days", "streams_all_time", "release_date", "sale_start_date", ] class ProductMetricsQuerySchema(QueryWithPermissionsSchema): distributors = fields.List(fields.String, required=True) country_ids = fields.List(fields.String, load_default=[]) 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) multi_product = fields.Boolean(load_default=False) is_feed_data_available = fields.Boolean(load_default=False) order_by = fields.String( load_default="streams_7_days", validate=validate.OneOf(TOP_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 ProductMetrics(AbstractSnowflakeQuery): query_schema = ProductMetricsQuerySchema filename = "product/metrics.sql" class ProductMetricsByParticipant(AbstractSnowflakeQuery): query_schema = ProductMetricsQuerySchema filename = "product/metrics_by_participant.sql"