'use server' import type { DeleteUserResult } 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 { user } 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 { usersCacheTags } from './types' export async function deleteUser(userId: string): Promise { const actor = await requireRole([UserRole.ADMIN, UserRole.EDITOR]) try { const now = new Date().toISOString() const auditRequestMetadata = await getAuditRequestMetadata() const [deletedUser] = await db .select({ email: user.email, name: user.name, role: user.role }) .from(user) .where(eq(user.id, userId)) .limit(1) await db.delete(user).where(eq(user.id, userId)) updateTag(usersCacheTags.all) runAdminEventHooks({ category: 'user', action: 'delete', targetType: 'user', targetId: userId, targetLabel: deletedUser?.email ?? userId, user: actor, timestamp: now, sourceType: 'admin_ui' as const, changedFields: [], metadata: { role: deletedUser?.role ?? null }, ...auditRequestMetadata }) return { success: true } } catch (error) { return { success: false, error: toActionError(error, 'Failed to delete user') } } }