From 8360d5d6de185117c4c8c91fd3326ad509c944c3 Mon Sep 17 00:00:00 2001 From: Mihkel Martin Kasterpalu Date: Wed, 22 Jan 2025 14:02:22 +0200 Subject: [PATCH] Return and save to state only the neccessary album data for paku biiti --- src/lib/server/AlbumState.svelte.ts | 14 ++++++-------- src/lib/types.ts | 15 +++++++++++++-- .../(singlescreen)/pakubiiti/+page.server.ts | 16 +++++++--------- .../api/pakubiiti/getAlbums/[count]/+server.ts | 14 ++++++++++++-- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/lib/server/AlbumState.svelte.ts b/src/lib/server/AlbumState.svelte.ts index 47f2d70..bafd5b9 100644 --- a/src/lib/server/AlbumState.svelte.ts +++ b/src/lib/server/AlbumState.svelte.ts @@ -1,9 +1,9 @@ -import type { AlbumSolveState } from '$lib/types'; +import type { AlbumData, AlbumSolveState } from '$lib/types'; class AlbumState { - private albums: SpotifyApi.AlbumObjectSimplified[] | undefined = undefined; + private albums: AlbumSolveState[] | undefined = undefined; - setAlbums(data: SpotifyApi.AlbumObjectSimplified[]) { + setAlbums(data: AlbumSolveState[]) { if (!data) { return; } @@ -29,14 +29,12 @@ class AlbumState { return false; } - if (matching.images.at(0)?.url !== solve.imageUrl) { + if (matching.image !== solve.image) { return false; } - for (const artistName of solve.artists) { - if (!matching.artists.find((artist) => artist.name === artistName)) { - return false; - } + if (matching.artists !== solve.artists) { + return false; } } diff --git a/src/lib/types.ts b/src/lib/types.ts index da34e6a..4571de4 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,7 +1,18 @@ +export type AlbumData = { + name: AlbumDataField; + artists: AlbumDataField; + image: AlbumDataField; +}; + +export type AlbumDataField = { + id: string; + value: string; +}; + export type AlbumSolveState = { name: string; - artists: string[]; - imageUrl: string; + artists: string; + image: string; }; export type Player = { diff --git a/src/routes/(games)/(singlescreen)/pakubiiti/+page.server.ts b/src/routes/(games)/(singlescreen)/pakubiiti/+page.server.ts index 55ac24e..9aad4c7 100644 --- a/src/routes/(games)/(singlescreen)/pakubiiti/+page.server.ts +++ b/src/routes/(games)/(singlescreen)/pakubiiti/+page.server.ts @@ -1,7 +1,7 @@ import { shuffleArray } from '$lib/utils'; import { nanoid } from 'nanoid'; import type { PageServerLoad } from './$types'; -import type { AlbumSolveState } from '$lib/types'; +import type { AlbumData, AlbumSolveState } from '$lib/types'; import { albumState } from '$lib/server/AlbumState.svelte'; import { playerState } from '$lib/server/PlayerState.svelte'; @@ -38,17 +38,17 @@ export const load: PageServerLoad = async ({ fetch, locals }) => { return res.json(); }) .then((data) => { - const albumNames = data.albums.map((album: SpotifyApi.AlbumObjectSimplified) => ({ + const albumNames = data.albums.map((album: AlbumData) => ({ id: nanoid(), value: album.name })); - const albumImages = data.albums.map((album: SpotifyApi.AlbumObjectSimplified) => ({ + const albumImages = data.albums.map((album: AlbumData) => ({ id: nanoid(), - value: album.images.at(0)?.url || '' + value: album.image })); - const albumArtists = data.albums.map((album: SpotifyApi.AlbumObjectSimplified) => ({ + const albumArtists = data.albums.map((album: AlbumData) => ({ id: nanoid(), - value: album.artists.map((artist) => artist.name).join(', ') + value: album.artists })); return { @@ -84,9 +84,7 @@ export const actions = { const image = data.get(`images_${i}`); const artists = data.get(`artists_${i}`); - const artistList = artists.split(', '); - - state.push({ name: name, imageUrl: image, artists: artistList }); + state.push({ name: name, image: image, artists: artists }); } const solved = albumState.checkSolve(state); diff --git a/src/routes/api/pakubiiti/getAlbums/[count]/+server.ts b/src/routes/api/pakubiiti/getAlbums/[count]/+server.ts index ccf5c70..23aadfb 100644 --- a/src/routes/api/pakubiiti/getAlbums/[count]/+server.ts +++ b/src/routes/api/pakubiiti/getAlbums/[count]/+server.ts @@ -1,16 +1,26 @@ import { albumState } from '$lib/server/AlbumState.svelte'; import { spotifyAPI } from '$lib/server/Spotify.svelte'; +import type { AlbumSolveState } from '$lib/types'; import { json } from '@sveltejs/kit'; export async function GET({ params }) { const count = params.count || 1; - const albums: SpotifyApi.AlbumObjectSimplified[] = []; + const albums: AlbumSolveState[] = []; for (let i = 0; i < count; i++) { const album = await spotifyAPI.getRandomAlbum(); if (album) { - albums.push(album); + const image = album.images.at(0); + if (!image?.url) { + return; + } + + albums.push({ + name: album.name, + artists: album.artists.map((artist) => artist.name).join(', '), + image: image.url + }); } }