diff --git a/discovery-provider/src/api/v1/models/tracks.py b/discovery-provider/src/api/v1/models/tracks.py index 6908378d7da..2f1e2567796 100644 --- a/discovery-provider/src/api/v1/models/tracks.py +++ b/discovery-provider/src/api/v1/models/tracks.py @@ -70,12 +70,18 @@ "remixes": fields.Boolean, }, ) + premium_conditions = ns.model( "premium_conditions", { "nft-collection": fields.String, }, ) +premium_content_signature = ns.model( + "premium_content_signature", + {"data": fields.String, "signature": fields.String}, +) + track = ns.model( "Track", { @@ -132,7 +138,10 @@ "remix_of": fields.Nested(full_remix_parent), "is_available": fields.Boolean, "is_premium": fields.Boolean, - "premium_conditions": fields.Nested(premium_conditions), + "premium_conditions": fields.Nested(premium_conditions, allow_null=True), + "premium_content_signature": fields.Nested( + premium_content_signature, allow_null=True + ), }, ) diff --git a/discovery-provider/src/premium_content/signature.py b/discovery-provider/src/premium_content/signature.py index 872e95a86f7..b32e93abe69 100644 --- a/discovery-provider/src/premium_content/signature.py +++ b/discovery-provider/src/premium_content/signature.py @@ -1,5 +1,6 @@ +import json from datetime import datetime -from typing import TypedDict, cast +from typing import TypedDict from src.api_helpers import generate_signature from src.premium_content.premium_content_types import PremiumContentType @@ -19,7 +20,7 @@ class PremiumContentSignatureArgs(TypedDict): class PremiumContentSignature(TypedDict): - data: PremiumContentSignatureData + data: str signature: str @@ -37,4 +38,4 @@ def get_premium_content_signature( "timestamp": _get_current_utc_timestamp_ms(), } signature = generate_signature(data) - return {"data": cast(PremiumContentSignatureData, data), "signature": signature} + return {"data": json.dumps(data), "signature": signature} diff --git a/discovery-provider/src/premium_content/signature_unit_test.py b/discovery-provider/src/premium_content/signature_unit_test.py index ff4371ed6a8..fc0ec3cf0bc 100644 --- a/discovery-provider/src/premium_content/signature_unit_test.py +++ b/discovery-provider/src/premium_content/signature_unit_test.py @@ -1,3 +1,4 @@ +import json from datetime import datetime from src.api_helpers import recover_wallet @@ -20,18 +21,21 @@ def test_signature(): "user_wallet": user_wallet, } ) + signature = result["signature"] + signature_data = result["data"] + signature_data_obj = json.loads(signature_data) after_ms = int(datetime.utcnow().timestamp() * 1000) - assert result["data"]["premium_content_id"] == premium_content_id - assert result["data"]["premium_content_type"] == premium_content_type - assert result["data"]["user_wallet"] == user_wallet - assert before_ms <= result["data"]["timestamp"] <= after_ms - assert len(result["signature"]) == 132 + assert signature_data_obj["premium_content_id"] == premium_content_id + assert signature_data_obj["premium_content_type"] == premium_content_type + assert signature_data_obj["user_wallet"] == user_wallet + assert before_ms <= signature_data_obj["timestamp"] <= after_ms + assert len(signature) == 132 discovery_node_wallet = recover_wallet( - result["data"], - result["signature"], + json.loads(signature_data), + signature, ) assert discovery_node_wallet == shared_config["delegate"]["owner_wallet"] diff --git a/discovery-provider/src/queries/get_trending_tracks.py b/discovery-provider/src/queries/get_trending_tracks.py index 4b285b7a957..bbde9220843 100644 --- a/discovery-provider/src/queries/get_trending_tracks.py +++ b/discovery-provider/src/queries/get_trending_tracks.py @@ -70,6 +70,7 @@ def generate_unpopulated_trending( # because of the filtering out of premium tracks if not should_apply_limit_early: tracks = tracks[:limit] + track_ids = [track["track_id"] for track in tracks] return (tracks, track_ids) @@ -129,6 +130,7 @@ def generate_unpopulated_trending_from_mat_views( # because of the filtering out of premium tracks if not should_apply_limit_early: tracks = tracks[:limit] + track_ids = [track["track_id"] for track in tracks] return (tracks, track_ids) diff --git a/discovery-provider/src/queries/get_underground_trending.py b/discovery-provider/src/queries/get_underground_trending.py index e63b4d30476..570551ecd69 100644 --- a/discovery-provider/src/queries/get_underground_trending.py +++ b/discovery-provider/src/queries/get_underground_trending.py @@ -218,6 +218,7 @@ def wrapped(): # because of the filtering out of premium tracks if not should_apply_limit_early: tracks = tracks[:UNDERGROUND_TRENDING_LENGTH] + track_ids = [track["track_id"] for track in tracks] return (tracks, track_ids) diff --git a/discovery-provider/src/queries/query_helpers.py b/discovery-provider/src/queries/query_helpers.py index 4a5708bd080..301fa1f858e 100644 --- a/discovery-provider/src/queries/query_helpers.py +++ b/discovery-provider/src/queries/query_helpers.py @@ -499,7 +499,7 @@ def populate_track_metadata( def _populate_premium_track_metadata(session, tracks, current_user_id): - premium_tracks = filter(lambda track: track["is_premium"], tracks) + premium_tracks = list(filter(lambda track: track["is_premium"], tracks)) if not premium_tracks: return @@ -547,7 +547,7 @@ def _populate_premium_track_metadata(session, tracks, current_user_id): { "id": track_id, "type": "track", - "user_wallet": current_user_wallet, + "user_wallet": current_user_wallet[0], } )