Clone
import { defineStore } from 'pinia'
import { ref } from 'vue'
import api from '../services/api'
export const useEntriesStore = defineStore('entries', () => {
const entries = ref([])
const loading = ref(false)
const error = ref(null)
async function fetchEntries() {
loading.value = true
error.value = null
try {
const response = await api.get('/entries')
entries.value = response.data.entries
} catch (err) {
error.value = err.response?.data?.error || 'Failed to fetch entries'
throw err
} finally {
loading.value = false
}
}
async function createEntry(data) {
loading.value = true
error.value = null
try {
const response = await api.post('/entries', data)
entries.value.unshift(response.data.entry)
return response.data.entry
} catch (err) {
error.value = err.response?.data?.error || 'Failed to create entry'
throw err
} finally {
loading.value = false
}
}
async function updateEntry(id, data) {
loading.value = true
error.value = null
try {
await api.put(`/entries/${id}`, data)
const index = entries.value.findIndex(e => e.id === id)
if (index !== -1) {
entries.value[index] = { ...entries.value[index], ...data }
}
} catch (err) {
error.value = err.response?.data?.error || 'Failed to update entry'
throw err
} finally {
loading.value = false
}
}
async function deleteEntry(id) {
loading.value = true
error.value = null
try {
await api.delete(`/entries/${id}`)
entries.value = entries.value.filter(e => e.id !== id)
} catch (err) {
error.value = err.response?.data?.error || 'Failed to delete entry'
throw err
} finally {
loading.value = false
}
}
async function fetchAnalytics(id) {
loading.value = true
error.value = null
try {
const response = await api.get(`/analytics/${id}`)
return response.data
} catch (err) {
error.value = err.response?.data?.error || 'Failed to fetch analytics'
throw err
} finally {
loading.value = false
}
}
return {
entries,
loading,
error,
fetchEntries,
createEntry,
updateEntry,
deleteEntry,
fetchAnalytics
}
})