import type { Compilation, Artist, Track } from '~/../types/types' // stores/data.ts import { defineStore } from 'pinia' export const useDataStore = defineStore('data', { state: () => ({ compilations: [] as Compilation[], // Store your compilation data here artists: [] as Artist[], // Store artist data here tracks: [] as Track[], // Store track data here isLoaded: false, // Remember if data is already loaded }), actions: { async loadData() { if (this.isLoaded) return const { data: compilations } = await useFetch('/api/compilations') const { data: artists } = await useFetch('/api/artists') const { data: rawTracks } = await useFetch<{ id: number, compilationId: string, title: string, artist: number, start: number, url: string, coverId: string }[]>('/api/tracks') // Stocker les données de base this.compilations = compilations.value ?? [] this.artists = artists.value ?? [] // Mapper les tracks pour remplacer l'artistId par l'objet Artist const artistMap = new Map(this.artists.map(a => [a.id, a])) this.tracks = (rawTracks.value ?? []).map(track => ({ ...track, artist: artistMap.get(track.artist) ?? { id: track.artist, name: 'Unknown', url: '', coverId: '' } })) this.isLoaded = true } }, getters: { // Obtenir tous les compilations getAllCompilations: (state) => state.compilations, getCompilationById: (state) => { return (id: string) => { return state.compilations.find(compilation => compilation.id === id) } }, // Obtenir toutes les pistes d'une compilation donnée getTracksByCompilationId: (state) => (compilationId: string) => { return state.tracks.filter(track => track.compilationId === compilationId) }, // Filtrer les artistes selon certains critères getArtistById: (state) => (id: number) => state.artists.find(artist => artist.id === id), // Obtenir toutes les pistes d'un artiste donné getTracksByArtistId: (state) => (artistId: number) => { return state.tracks.filter(track => track.artist.id === artistId) }, }, })