fc3h(ui): Pinia backup store — runs, triggers, restore, delete, tag, settings
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import { useApi } from '../composables/useApi.js'
|
||||
|
||||
export const useBackupStore = defineStore('backup', () => {
|
||||
const api = useApi()
|
||||
|
||||
const dbRuns = ref([])
|
||||
const imagesRuns = ref([])
|
||||
const settings = ref(null)
|
||||
const loading = ref({ dbRuns: false, imagesRuns: false, settings: false })
|
||||
const lastError = ref(null)
|
||||
|
||||
async function loadRuns(kind) {
|
||||
const targetRef = kind === 'db' ? dbRuns : imagesRuns
|
||||
const loadingKey = kind === 'db' ? 'dbRuns' : 'imagesRuns'
|
||||
loading.value[loadingKey] = true
|
||||
lastError.value = null
|
||||
try {
|
||||
const body = await api.get('/api/system/backup/runs', {
|
||||
params: { kind, limit: 50 },
|
||||
})
|
||||
targetRef.value = body.runs || []
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
} finally {
|
||||
loading.value[loadingKey] = false
|
||||
}
|
||||
}
|
||||
|
||||
async function triggerBackup(kind, tag = null) {
|
||||
lastError.value = null
|
||||
try {
|
||||
await api.post(`/api/system/backup/${kind}`, {
|
||||
body: tag ? { tag } : {},
|
||||
})
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
async function restore(runId, confirm) {
|
||||
lastError.value = null
|
||||
try {
|
||||
await api.post(`/api/system/backup/runs/${runId}/restore`, {
|
||||
body: { confirm },
|
||||
})
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteRun(runId, confirm) {
|
||||
lastError.value = null
|
||||
try {
|
||||
await api.delete(`/api/system/backup/runs/${runId}`, {
|
||||
body: { confirm },
|
||||
})
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
async function setTag(runId, tag) {
|
||||
lastError.value = null
|
||||
try {
|
||||
await api.patch(`/api/system/backup/runs/${runId}`, {
|
||||
body: { tag },
|
||||
})
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
async function loadSettings() {
|
||||
loading.value.settings = true
|
||||
lastError.value = null
|
||||
try {
|
||||
settings.value = await api.get('/api/system/backup/settings')
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
} finally {
|
||||
loading.value.settings = false
|
||||
}
|
||||
}
|
||||
|
||||
async function patchSettings(patch) {
|
||||
lastError.value = null
|
||||
try {
|
||||
settings.value = await api.patch('/api/system/backup/settings', {
|
||||
body: patch,
|
||||
})
|
||||
} catch (e) {
|
||||
lastError.value = e.message
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
dbRuns, imagesRuns, settings, loading, lastError,
|
||||
loadRuns, triggerBackup, restore, deleteRun, setTag,
|
||||
loadSettings, patchSettings,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user