Files
RenewCMS/web/src/composables/useMediaPurge.ts
T

79 lines
1.7 KiB
TypeScript

import { useApi } from '@/composables/useApi'
import { bumpMediaRevision } from '@/lib/mediaRevision'
export interface PurgeSettings {
auto_purge_enabled: boolean
auto_purge_interval_days: number
last_purge_at: string | null
last_purge_merged: number
last_purge_articles_updated: number
enabled_at: string | null
next_purge_at: string | null
}
export type PurgeSettingsPatch =
| { auto_purge_enabled: boolean }
| { auto_purge_interval_days: number }
export interface PurgePreviewGroup {
keep_id: number
filename: string
url: string
used_in: number
merged: number
}
export interface PurgePreview {
groups: number
copies: number
articles: number
list: PurgePreviewGroup[]
more: number
fingerprint: string
}
export interface PurgeResult {
groups_total: number
groups_purged: number
merged: number
articles_updated: number
failed_groups: number
}
const SETTINGS_PATH = '/v1/media/purge-settings'
const PREVIEW_PATH = '/v1/media/purge-preview'
const PURGE_PATH = '/v1/media/purge'
const JSON_HEADERS = { 'Content-Type': 'application/json' }
export function useMediaPurge() {
const { request } = useApi()
function getSettings() {
return request<PurgeSettings>(SETTINGS_PATH)
}
function updateSettings(patch: PurgeSettingsPatch) {
return request<PurgeSettings>(SETTINGS_PATH, {
method: 'PATCH',
headers: JSON_HEADERS,
body: JSON.stringify(patch),
})
}
function getPreview() {
return request<PurgePreview>(PREVIEW_PATH)
}
async function purge(fingerprint: string) {
const result = await request<PurgeResult>(PURGE_PATH, {
method: 'POST',
headers: JSON_HEADERS,
body: JSON.stringify({ fingerprint }),
})
bumpMediaRevision()
return result
}
return { getSettings, updateSettings, getPreview, purge }
}