All files / Rindu/utils getSetLists.ts

100% Statements 8/8
100% Branches 4/4
100% Functions 1/1
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                                                                                                            5x       3x 2x                     2x 1x 1x   1x    
interface SetListArtistInfo {
  mbid: string;
  tmid: number;
  name: string;
  sortName: string;
  disambiguation: string;
  url: string;
}
 
export interface SetLists {
  setlist: {
    artist: SetListArtistInfo[];
    venue?: {
      city: {
        coords: {
          lat: number;
          lng: number;
        };
        country: {
          code: string;
          name: string;
        };
        id: string;
        name: string;
        state: string;
        stateCode: string;
      };
      url: string;
      id: string;
      name: string;
    };
    tour?: {
      name: string;
    };
    sets?: {
      set: {
        name: string;
        encore: number;
        song: { name: string; info?: string }[];
      }[];
      url: string;
    };
    info: string;
    url: string;
    id: string;
    versionId: string;
    eventDate: string;
    lastUpdated: string;
  }[];
  total: number;
  page: number;
  itemsPerPage: number;
}
 
export async function getSetLists(
  artistName?: string,
  apiKey?: string
): Promise<SetLists | null> {
  if (!artistName || !apiKey) return null;
  const res = await fetch(
    `https://api.setlist.fm/rest/1.0/search/setlists?artistName=${artistName}&p=1&sort=relevance`,
    {
      method: "GET",
      headers: {
        accept: "application/json",
        "x-api-key": apiKey,
      },
    }
  );
 
  if (res.ok) {
    const data = (await res.json()) as SetLists;
    return data;
  }
  return null;
}