From 04559504a785a6c275e9067332179a515cc13147 Mon Sep 17 00:00:00 2001 From: Joe Shambrook Date: Sun, 20 Nov 2022 15:24:11 +0000 Subject: [PATCH] refactor: :truck: small reorganisation of functions --- src/index.ts | 26 +++++++++++--------------- src/lib/spotify.ts | 29 +++++++++++++++++++++++++++++ src/lib/{mapping.ts => utils.ts} | 0 3 files changed, 40 insertions(+), 15 deletions(-) rename src/lib/{mapping.ts => utils.ts} (100%) diff --git a/src/index.ts b/src/index.ts index d75dd87..9068878 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ -import { getAccessToken } from "./lib/spotify"; import { Router } from "itty-router"; -import { mapTracks } from "./lib/mapping"; +import { getAccessToken, getTopTracks } from "./lib/spotify"; +import { mapTracks } from "./lib/utils"; const router = Router(); @@ -22,23 +22,19 @@ router.get("/top", async (request, env, context) => { const url = new URL(request.url); + // all search parameter options const type = url.searchParams.get("type") ?? "tracks"; - const time_range = url.searchParams.get("time_range") ?? "short_term"; + const timeRange = url.searchParams.get("time_range") ?? "short_term"; const limit = url.searchParams.get("limit") ?? "20"; const offset = url.searchParams.get("offset") ?? "0"; - const rawResponse: SpotifyApi.UsersTopTracksResponse = await fetch( - `https://api.spotify.com/v1/me/top/${type}?time_range=${time_range}&limit=${limit}&offset=${offset}`, - { - cf: { - cacheTtl: 3600, - cacheEverything: true, - }, - headers: { - Authorization: `Bearer ${access_token}`, - }, - } - ).then((r) => r.json()); + const rawResponse = await getTopTracks({ + accessToken: access_token, + type, + timeRange, + limit, + offset, + }); const mappedResponse = mapTracks(rawResponse.items); diff --git a/src/lib/spotify.ts b/src/lib/spotify.ts index 45e22eb..a1be514 100644 --- a/src/lib/spotify.ts +++ b/src/lib/spotify.ts @@ -29,3 +29,32 @@ export const getAccessToken = ({ return r as SpotifyAccessTokenResponse; }); }; + +type getTopTracksParams = { + accessToken: string; + type: string; + timeRange: string; + limit: string; + offset: string; +}; + +export const getTopTracks = ({ + accessToken, + type, + timeRange, + limit, + offset, +}: getTopTracksParams): Promise => { + return fetch( + `https://api.spotify.com/v1/me/top/${type}?time_range=${timeRange}&limit=${limit}&offset=${offset}`, + { + cf: { + cacheTtl: 3600, + cacheEverything: true, + }, + headers: { + Authorization: `Bearer ${accessToken}`, + }, + } + ).then((r) => r.json()); +}; diff --git a/src/lib/mapping.ts b/src/lib/utils.ts similarity index 100% rename from src/lib/mapping.ts rename to src/lib/utils.ts