mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 13:11:12 -05:00
feat: Implement item editing capability
This commit is contained in:
@@ -388,6 +388,88 @@ async function updateSubmissionStatusAfterRejection(submissionId: string): Promi
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a submission item - moderators edit directly, users auto-escalate
|
||||
*/
|
||||
export async function editSubmissionItem(
|
||||
itemId: string,
|
||||
newData: any,
|
||||
userId: string
|
||||
): Promise<void> {
|
||||
if (!userId) {
|
||||
throw new Error('User authentication required to edit items');
|
||||
}
|
||||
|
||||
// Get current item to preserve original_data
|
||||
const { data: currentItem, error: fetchError } = await supabase
|
||||
.from('submission_items')
|
||||
.select('*, submission:content_submissions(user_id)')
|
||||
.eq('id', itemId)
|
||||
.single();
|
||||
|
||||
if (fetchError) throw fetchError;
|
||||
|
||||
// Check if user has moderator/admin permissions
|
||||
const { data: userRoles } = await supabase
|
||||
.from('user_roles')
|
||||
.select('role')
|
||||
.eq('user_id', userId);
|
||||
|
||||
const isModerator = userRoles?.some(r =>
|
||||
['moderator', 'admin', 'superuser'].includes(r.role)
|
||||
);
|
||||
|
||||
// Preserve original_data if not already set
|
||||
const originalData = currentItem.original_data || currentItem.item_data;
|
||||
|
||||
if (isModerator) {
|
||||
// Moderators can edit directly
|
||||
const { error: updateError } = await supabase
|
||||
.from('submission_items')
|
||||
.update({
|
||||
item_data: newData,
|
||||
original_data: originalData,
|
||||
updated_at: new Date().toISOString(),
|
||||
})
|
||||
.eq('id', itemId);
|
||||
|
||||
if (updateError) throw updateError;
|
||||
|
||||
// Log admin action
|
||||
await supabase
|
||||
.from('admin_audit_log')
|
||||
.insert({
|
||||
admin_user_id: userId,
|
||||
target_user_id: (currentItem.submission as any).user_id,
|
||||
action: 'edit_submission_item',
|
||||
details: {
|
||||
item_id: itemId,
|
||||
item_type: currentItem.item_type,
|
||||
changes: 'Item data updated',
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// Regular users: update data and auto-escalate
|
||||
const { error: updateError } = await supabase
|
||||
.from('submission_items')
|
||||
.update({
|
||||
item_data: newData,
|
||||
original_data: originalData,
|
||||
updated_at: new Date().toISOString(),
|
||||
})
|
||||
.eq('id', itemId);
|
||||
|
||||
if (updateError) throw updateError;
|
||||
|
||||
// Auto-escalate the parent submission
|
||||
await escalateSubmission(
|
||||
currentItem.submission_id,
|
||||
`User requested edit to ${currentItem.item_type}`,
|
||||
userId
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Escalate submission for admin review
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user