Return and save to state only the neccessary album data for paku biiti
This commit is contained in:
parent
c7d7ca349d
commit
8360d5d6de
4 changed files with 38 additions and 21 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue