mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 22:31:13 -05:00
feat: Implement comprehensive audit logging
This commit is contained in:
@@ -235,6 +235,25 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
// Log audit trail for review moderation
|
||||
if (table === 'reviews' && user) {
|
||||
try {
|
||||
await supabase.rpc('log_admin_action', {
|
||||
_admin_user_id: user.id,
|
||||
_target_user_id: item.user_id,
|
||||
_action: `review_${action}`,
|
||||
_details: {
|
||||
review_id: item.id,
|
||||
entity_type: item.entity_type,
|
||||
entity_id: item.entity_id,
|
||||
moderator_notes: moderatorNotes
|
||||
}
|
||||
});
|
||||
} catch (auditError) {
|
||||
logger.error('Failed to log review moderation audit', { error: auditError });
|
||||
}
|
||||
}
|
||||
|
||||
toast({
|
||||
title: `Content ${action}`,
|
||||
description: `The ${item.type} has been ${action}`,
|
||||
@@ -266,10 +285,35 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
|
||||
onActionStart(item.id);
|
||||
|
||||
try {
|
||||
// Fetch submission details for audit log
|
||||
const { data: submission } = await supabase
|
||||
.from('content_submissions')
|
||||
.select('user_id, submission_type, status')
|
||||
.eq('id', item.id)
|
||||
.single();
|
||||
|
||||
const { error } = await supabase.from('content_submissions').delete().eq('id', item.id);
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
// Log audit trail for deletion
|
||||
if (user && submission) {
|
||||
try {
|
||||
await supabase.rpc('log_admin_action', {
|
||||
_admin_user_id: user.id,
|
||||
_target_user_id: submission.user_id,
|
||||
_action: 'submission_deleted',
|
||||
_details: {
|
||||
submission_id: item.id,
|
||||
submission_type: submission.submission_type,
|
||||
status_when_deleted: submission.status
|
||||
}
|
||||
});
|
||||
} catch (auditError) {
|
||||
logger.error('Failed to log submission deletion audit', { error: auditError });
|
||||
}
|
||||
}
|
||||
|
||||
toast({
|
||||
title: 'Submission deleted',
|
||||
description: 'The submission has been permanently deleted',
|
||||
@@ -302,6 +346,23 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
|
||||
const { resetRejectedItemsToPending } = await import('@/lib/submissionItemsService');
|
||||
await resetRejectedItemsToPending(item.id);
|
||||
|
||||
// Log audit trail for reset
|
||||
if (user) {
|
||||
try {
|
||||
await supabase.rpc('log_admin_action', {
|
||||
_admin_user_id: user.id,
|
||||
_target_user_id: item.user_id,
|
||||
_action: 'submission_reset',
|
||||
_details: {
|
||||
submission_id: item.id,
|
||||
submission_type: item.submission_type
|
||||
}
|
||||
});
|
||||
} catch (auditError) {
|
||||
logger.error('Failed to log submission reset audit', { error: auditError });
|
||||
}
|
||||
}
|
||||
|
||||
toast({
|
||||
title: 'Reset Complete',
|
||||
description: 'Submission and all items have been reset to pending status',
|
||||
@@ -355,6 +416,25 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
// Log audit trail for retry
|
||||
if (user) {
|
||||
try {
|
||||
await supabase.rpc('log_admin_action', {
|
||||
_admin_user_id: user.id,
|
||||
_target_user_id: item.user_id,
|
||||
_action: 'submission_retried',
|
||||
_details: {
|
||||
submission_id: item.id,
|
||||
submission_type: item.submission_type,
|
||||
items_retried: failedItems.length,
|
||||
request_id: requestId
|
||||
}
|
||||
});
|
||||
} catch (auditError) {
|
||||
logger.error('Failed to log submission retry audit', { error: auditError });
|
||||
}
|
||||
}
|
||||
|
||||
toast({
|
||||
title: 'Items Retried',
|
||||
description: `Successfully retried ${failedItems.length} failed item(s)${requestId ? ` (Request: ${requestId.substring(0, 8)})` : ''}`,
|
||||
|
||||
Reference in New Issue
Block a user