import { reactive } from 'vue' import { http } from '@/services' export const podcastStore = { state: reactive({ podcasts: [] as Podcast[] }), byId (id: Podcast['id']) { return this.state.podcasts.find(podcast => podcast.id === id) }, async resolve (id: Podcast['id']) { return this.byId(id) ?? await this.fetchOne(id) }, async store (url: string) { const podcast = await http.post('podcasts', { url }) this.state.podcasts.push(podcast) return podcast }, async fetchAll () { this.state.podcasts = await http.get('podcasts') return this.state.podcasts }, async fetchOne (id: Podcast['id']) { this.state.podcasts.push(await http.get(`podcasts/${id}`)) return this.byId(id)! }, async unsubscribe (podcast: Podcast) { await http.delete(`podcasts/${podcast.id}/subscriptions`) this.state.podcasts = this.state.podcasts.filter(p => p.id !== podcast.id) }, }