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(SETTINGS_PATH) } function updateSettings(patch: PurgeSettingsPatch) { return request(SETTINGS_PATH, { method: 'PATCH', headers: JSON_HEADERS, body: JSON.stringify(patch), }) } function getPreview() { return request(PREVIEW_PATH) } async function purge(fingerprint: string) { const result = await request(PURGE_PATH, { method: 'POST', headers: JSON_HEADERS, body: JSON.stringify({ fingerprint }), }) bumpMediaRevision() return result } return { getSettings, updateSettings, getPreview, purge } }