route v1
This commit is contained in:
		| @@ -10,59 +10,62 @@ export const useDataStore = defineStore('data', { | ||||
|     boxes: [] as Box[], // Store your box data here | ||||
|     artists: [] as Artist[], // Store artist data here | ||||
|     tracks: [] as Track[], // Store track data here | ||||
|     isLoaded: false // Remember if data is already loaded | ||||
|     isLoaded: false, // Remember if data is already loaded | ||||
|     isLoading: true | ||||
|   }), | ||||
|  | ||||
|   actions: { | ||||
|     async loadData() { | ||||
|       if (this.isLoaded) return | ||||
|       this.isLoading = true | ||||
|       try { | ||||
|         this.boxes = await $fetch<Box[]>('/api/boxes') | ||||
|         this.artists = await $fetch<Artist[]>('/api/artists') | ||||
|         const compilationTracks = await $fetch<Track[]>('/api/tracks/compilation') | ||||
|         const playlistTracks = await $fetch<Track[]>('/api/tracks/playlist') | ||||
|  | ||||
|       this.boxes = await $fetch<Box[]>('/api/boxes') | ||||
|       this.artists = await $fetch<Artist[]>('/api/artists') | ||||
|       const compilationTracks = await $fetch<Track[]>('/api/tracks/compilation') | ||||
|       const playlistTracks = await $fetch<Track[]>('/api/tracks/playlist') | ||||
|         // Mapper les tracks pour remplacer l'artist avec un objet Artist cohérent | ||||
|         const artistMap = new Map(this.artists.map((a) => [a.id, a])) | ||||
|         const allTracks = [...(compilationTracks ?? []), ...(playlistTracks ?? [])] | ||||
|  | ||||
|       // Mapper les tracks pour remplacer l'artist avec un objet Artist cohérent | ||||
|       const artistMap = new Map(this.artists.map((a) => [a.id, a])) | ||||
|       const allTracks = [...(compilationTracks ?? []), ...(playlistTracks ?? [])] | ||||
|         this.tracks = allTracks.map((track) => { | ||||
|           const a = track.artist as unknown | ||||
|           let artistObj: Artist | ||||
|           if (typeof a === 'number') { | ||||
|             artistObj = artistMap.get(a) ?? { id: a, name: String(a), url: '', coverId: '' } | ||||
|           } else if (typeof a === 'string') { | ||||
|             artistObj = { id: 0, name: a, url: '', coverId: '' } | ||||
|           } else if (a && typeof a === 'object' && 'id' in (a as any)) { | ||||
|             const idVal = (a as any).id as number | undefined | ||||
|             artistObj = idVal != null ? artistMap.get(idVal) ?? (a as Artist) : (a as Artist) | ||||
|           } else { | ||||
|             artistObj = { id: 0, name: '', url: '', coverId: '' } | ||||
|           } | ||||
|  | ||||
|       this.tracks = allTracks.map((track) => { | ||||
|         const a = track.artist as unknown | ||||
|         let artistObj: Artist | ||||
|         if (typeof a === 'number') { | ||||
|           artistObj = artistMap.get(a) ?? { id: a, name: String(a), url: '', coverId: '' } | ||||
|         } else if (typeof a === 'string') { | ||||
|           artistObj = { id: 0, name: a, url: '', coverId: '' } | ||||
|         } else if (a && typeof a === 'object' && 'id' in (a as any)) { | ||||
|           const idVal = (a as any).id as number | undefined | ||||
|           artistObj = idVal != null ? artistMap.get(idVal) ?? (a as Artist) : (a as Artist) | ||||
|         } else { | ||||
|           artistObj = { id: 0, name: '', url: '', coverId: '' } | ||||
|           return { | ||||
|             ...track, | ||||
|             artist: artistObj | ||||
|           } | ||||
|         }) | ||||
|         const favBox: Box = { | ||||
|           id: FAVORITES_BOX_ID, | ||||
|           type: 'playlist', | ||||
|           name: 'Favoris', | ||||
|           duration: 0, | ||||
|           tracks: [], | ||||
|           description: '', | ||||
|           color1: '#0f172a', | ||||
|           color2: '#1e293b', | ||||
|           color3: '#334155', | ||||
|           state: 'box-list' | ||||
|         } | ||||
|  | ||||
|         return { | ||||
|           ...track, | ||||
|           artist: artistObj | ||||
|         if (!this.boxes.find((b) => b.id === FAVORITES_BOX_ID)) { | ||||
|           this.boxes = [favBox, ...this.boxes] | ||||
|         } | ||||
|       }) | ||||
|       const favBox: Box = { | ||||
|         id: FAVORITES_BOX_ID, | ||||
|         type: 'playlist', | ||||
|         name: 'Favoris', | ||||
|         duration: 0, | ||||
|         tracks: [], | ||||
|         description: '', | ||||
|         color1: '#0f172a', | ||||
|         color2: '#1e293b', | ||||
|         color3: '#334155', | ||||
|         state: 'box-list' | ||||
|         this.isLoaded = true | ||||
|       } finally { | ||||
|         this.isLoading = false | ||||
|       } | ||||
|       if (!this.boxes.find((b) => b.id === FAVORITES_BOX_ID)) { | ||||
|         this.boxes = [favBox, ...this.boxes] | ||||
|       } | ||||
|       this.isLoaded = true | ||||
|       const uiStore = useUiStore() | ||||
|       uiStore.closeBox() | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user