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, // To track if data is already loaded }), actions: { async loadData() { if (this.isLoaded) return // Avoid re-fetching if already loaded // Fetch your data once (e.g., from an API or local JSON) const { data: compilations } = await useFetch('/api/compilations') const { data: artists } = await useFetch('/api/artists') const { data: tracks } = await useFetch('/api/tracks') // Set the data in the store this.compilations = compilations.value this.artists = artists.value this.tracks = tracks.value 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.compilation === 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: string) => { return state.tracks.filter(track => track.artistId === artistId) }, }, })