"""Push notifications views.""" import logging from flask import jsonify from flask_apispec import MethodResource, doc, marshal_with from apollo_main_db.apollo.models import StarredContent from src.db.base import session as db_session from src.legacy.push_notifications import serializers as push_serializers logger = logging.getLogger("notifications") # Pay attention that this method is quite similar to get_starred_tracks_query. # If you change one, double-check the second one @doc("Endpoint to get all AGO users favorite tracks.") class FavoritesView(MethodResource): @marshal_with(push_serializers.FavoritesOutputSchema, code=200, description="List of favorites") def get(self): """Retrieve list of starred tracks (uri and isrc) for a user.""" favorites_query = ( db_session.query(StarredContent.isrc.label("isrc")) .filter( StarredContent.isrc.isnot(None), StarredContent.isrc.op("regexp")(r"^[A-Za-z]{2}[A-Za-z0-9]{3}[0-9]{7}$"), ) .distinct(StarredContent.isrc) ) data = {"tracks": [isrc[0] for isrc in favorites_query.all()]} return jsonify(push_serializers.FavoritesOutputSchema().dump(data))