Fix frontend JSONB references

This commit is contained in:
gpt-engineer-app[bot]
2025-11-03 21:19:51 +00:00
parent a4e1be8056
commit 63d9d8890c
8 changed files with 193 additions and 61 deletions

View File

@@ -322,14 +322,30 @@ export async function fetchSystemActivities(
}
// Fetch admin audit log (admin actions)
// Note: Details are now in admin_audit_details table
const { data: auditLogs, error: auditError } = await supabase
.from('admin_audit_log')
.select('id, admin_user_id, target_user_id, action, details, created_at')
.select(`
id,
admin_user_id,
target_user_id,
action,
created_at,
admin_audit_details(detail_key, detail_value)
`)
.order('created_at', { ascending: false })
.limit(limit);
if (!auditError && auditLogs) {
for (const log of auditLogs) {
// Convert relational details back to object format
const details: Record<string, any> = {};
if (log.admin_audit_details) {
for (const detail of log.admin_audit_details as any[]) {
details[detail.detail_key] = detail.detail_value;
}
}
activities.push({
id: log.id,
type: 'admin_action',
@@ -339,16 +355,24 @@ export async function fetchSystemActivities(
details: {
action: log.action,
target_user_id: log.target_user_id,
details: log.details,
details,
} as AdminActionDetails,
});
}
}
// Fetch submission reviews (approved/rejected submissions)
// Note: Content is now in submission_metadata table, but entity_name is cached in view
const { data: submissions, error: submissionsError } = await supabase
.from('content_submissions')
.select('id, submission_type, status, reviewer_id, reviewed_at, content')
.select(`
id,
submission_type,
status,
reviewer_id,
reviewed_at,
submission_metadata(name)
`)
.not('reviewed_at', 'is', null)
.in('status', ['approved', 'rejected', 'partially_approved'])
.order('reviewed_at', { ascending: false })
@@ -385,7 +409,12 @@ export async function fetchSystemActivities(
);
for (const submission of submissions) {
const contentData = submission.content as SubmissionContent;
// Get name from submission_metadata
const metadata = submission.submission_metadata as any;
const entityName = Array.isArray(metadata) && metadata.length > 0
? metadata[0]?.name
: undefined;
const submissionItem = itemsMap.get(submission.id);
const itemData = submissionItem?.item_data as any;
@@ -394,7 +423,7 @@ export async function fetchSystemActivities(
submission_id: submission.id,
submission_type: submission.submission_type,
status: submission.status,
entity_name: contentData?.name,
entity_name: entityName,
};
// Enrich with photo-specific data for photo submissions
@@ -600,7 +629,14 @@ export async function fetchSystemActivities(
// 3. User bans/unbans from admin audit log
const { data: banActions, error: banError } = await supabase
.from('admin_audit_log')
.select('id, admin_user_id, target_user_id, action, details, created_at')
.select(`
id,
admin_user_id,
target_user_id,
action,
created_at,
admin_audit_details(detail_key, detail_value)
`)
.in('action', ['user_banned', 'user_unbanned'])
.order('created_at', { ascending: false })
.limit(limit);
@@ -608,6 +644,15 @@ export async function fetchSystemActivities(
if (!banError && banActions) {
for (const action of banActions) {
const activityType = action.action === 'user_banned' ? 'user_banned' : 'user_unbanned';
// Convert relational details back to object format
const details: Record<string, any> = {};
if (action.admin_audit_details) {
for (const detail of action.admin_audit_details as any[]) {
details[detail.detail_key] = detail.detail_value;
}
}
activities.push({
id: action.id,
type: activityType,
@@ -617,7 +662,7 @@ export async function fetchSystemActivities(
details: {
user_id: action.target_user_id,
action: action.action === 'user_banned' ? 'banned' : 'unbanned',
reason: typeof action.details === 'object' && action.details && 'reason' in action.details ? String(action.details.reason) : undefined,
reason: details.reason,
} as AccountLifecycleDetails,
});
}