feat: Implement item editing capability

This commit is contained in:
gpt-engineer-app[bot]
2025-09-30 14:16:59 +00:00
parent a7288a0d4c
commit 337552224b
4 changed files with 385 additions and 1 deletions

View File

@@ -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
*/