from marshmallow import fields, validate from analytics.connectors.snowflake import AbstractSnowflakeQuery from analytics.queries.schema import QueryWithPermissionsSchema from analytics.schemas.sound_recording_metadata import ISRC class TiktokTimeSeriesQuerySchema(QueryWithPermissionsSchema): isrc = ISRC(required=True) reverse_isrc = fields.String(required=True) summary = fields.Boolean() start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) ids = fields.List(fields.String) type = fields.Str() aggregation_field = fields.Str() days_back = fields.Int(allow_none=True) max_available_date = fields.Date() # --- pagination fields --- limit = fields.Int(load_default=25) offset = fields.Int(load_default=0) order_by = fields.Str() order_dir = fields.String(allow_none=True, validate=validate.OneOf(["ASC", "DESC"])) user_has_full_access = fields.Boolean(required=True, allow_none=False) class TiktokAggregatedSummaryQuerySchema(QueryWithPermissionsSchema): isrc = ISRC(required=True) reverse_isrc = fields.String(required=True) countries = fields.List(fields.String) top_size = fields.Int(load_default=5) user_has_full_access = fields.Boolean(required=True, allow_none=False) class TiktokAggregatedTimeSeriesQuerySchema(QueryWithPermissionsSchema): isrc = ISRC(required=True) reverse_isrc = fields.String(required=True) countries = fields.List(fields.String) top_size = fields.Int(load_default=5) days_back = fields.Int(load_default=28) max_available_date = fields.Date() is_tiktok_filters_enabled = fields.Boolean(required=False, allow_none=True) user_has_full_access = fields.Boolean(required=True, allow_none=False) class TiktokTimeSeries(AbstractSnowflakeQuery): query_schema = TiktokTimeSeriesQuerySchema filename = "tiktok_time_series.sql" class TiktokAggregatedSummary(AbstractSnowflakeQuery): query_schema = TiktokAggregatedSummaryQuerySchema filename = "tiktok_aggregated_summary.sql" class TiktokAggregatedTimeSeries(AbstractSnowflakeQuery): query_schema = TiktokAggregatedTimeSeriesQuerySchema filename = "tiktok_aggregated_time_series.sql"