79 lines
1.7 KiB
TypeScript
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 }
|
|
}
|