'use server' import { revalidatePath } from 'next/cache' import { fileRepository } from '@/entities/file' import { noteId } from '@/entities/note' import { audit, blob, db, logger } from '@/shared/api' import { ensureVisitor } from '@/shared/lib/visitor-session' /** Remove an attachment the visitor attached: its row first, then its stored bytes. */ export async function deleteFile(id: string): Promise { try { const key = noteId.parse(id) const actor = await ensureVisitor() const removed = await fileRepository(db()).remove(key, actor) if (!removed) { logger()?.info('file.deleted', { 'file.id': key, outcome: 'denied' }) return } await blob().del(removed.url) await audit().log('file.deleted', { actor: { kind: 'human', id: actor }, target: { id: key } }) logger()?.info('file.deleted', { 'file.id': key, outcome: 'ok' }) revalidatePath('/') } catch (error) { logger()?.recordException(error, { 'conusai.action': 'file.deleted', 'file.id': id }) throw error } }