"""New Music Friday Handlers""" from flask_pydantic_api import pydantic_api from pydantic import conlist from pydantic import BaseModel from pydantic import Field from pydantic import TypeAdapter from charts.api import app from charts.logic import new_music_friday from charts.logic import new_music_friday_date from charts.logic import new_music_friday_search class NewMusicFrdayDateEntriesParameters(BaseModel): filter: str = Field(default='{}') order: str = Field( default='[{"by":"FEATURING","dir":"DESC"},{"by":"TOP_10_RANK","dir":"DESC"},{"by":"AVERAGE_POSITION","dir":"ASC"}]' ) offset: int = Field(default=0) limit: int = Field(default=200) newMusicFridayDateEntriesOrdersTA = TypeAdapter(conlist(new_music_friday_date.NewMusicFridayDateEntriesOrder, min_length=1)) @app.route("/new-music-friday//entries/", methods=["GET"]) @pydantic_api() def get_new_music_friday_date_entries( date: str, params: NewMusicFrdayDateEntriesParameters, ) -> new_music_friday_date.NewMusicFridayDateEntriesResponse: return new_music_friday_date.new_music_friday_date_entries( date, new_music_friday_date.NewMusicFridayDateEntriesFilter.model_validate_json(params.filter), newMusicFridayDateEntriesOrdersTA.validate_json(params.order), params.offset, params.limit, ) @app.route("/new-music-friday//markets/", methods=["GET"]) @pydantic_api() def get_new_music_friday_date_markets( date: str, ) -> new_music_friday_date.NewMusicFridayDateMarketsResponse: return new_music_friday_date.new_music_friday_date_markets( date, ) @app.route("/new-music-friday/dates", methods=["GET"]) @pydantic_api() def get_new_music_friday_dates() -> new_music_friday.NewMusicFridayDatesResponse: return new_music_friday.new_music_friday_dates() class NewMusicFridaySearchParameters(BaseModel): term: str @app.route("/new-music-friday//search/", methods=["GET"]) @pydantic_api() def get_new_music_friday_search( date: str, params: NewMusicFridaySearchParameters, ) -> new_music_friday_date.NewMusicFridayDateEntriesResponse: return new_music_friday_search.new_music_friday_search(date, params.term)