'use server' import type { DeleteMediaResult } from './types' import { getAuditRequestMetadata } from '@admin/actions/audit/get-audit-request-metadata' import { requireRole, UserRole } from '@admin/auth/middleware' import db from '@admin/db' import { adminMedia } from '@admin/db/schema' import { runAdminEventHooks } from '@admin/lib/lifecycle-hooks' import { toActionError } from '@admin/utils/error/to-action-error' import { eq } from 'drizzle-orm' import { updateTag } from 'next/cache' import { mediaCacheTags } from './types' export async function deleteMedia(id: string): Promise { const actor = await requireRole([UserRole.ADMIN, UserRole.EDITOR]) try { const now = new Date().toISOString() const auditRequestMetadata = await getAuditRequestMetadata() const [deletedMedia] = await db.select().from(adminMedia).where(eq(adminMedia.id, id)).limit(1) await db.delete(adminMedia).where(eq(adminMedia.id, id)) updateTag(mediaCacheTags.all) updateTag(mediaCacheTags.byId(id)) runAdminEventHooks({ category: 'media', action: 'delete', targetType: 'media', targetId: id, targetLabel: deletedMedia?.filename ?? id, user: actor, timestamp: now, sourceType: 'admin_ui' as const, changedFields: [], metadata: { contentType: deletedMedia?.contentType ?? null }, ...auditRequestMetadata }) return { success: true } } catch (error) { return { success: false, error: toActionError(error, 'Failed to delete media') } } }