diff --git a/supabase/functions/backfill-park-locations/index.ts b/supabase/functions/backfill-park-locations/index.ts new file mode 100644 index 00000000..2ddf61cc --- /dev/null +++ b/supabase/functions/backfill-park-locations/index.ts @@ -0,0 +1,54 @@ +import { createEdgeFunction } from '../_shared/edgeFunctionWrapper.ts'; +import { edgeLogger } from '../_shared/logger.ts'; + +export default createEdgeFunction( + { + name: 'backfill-park-locations', + requireAuth: true, + }, + async (req, context, supabase) => { + edgeLogger.info('Starting park location backfill', { requestId: context.requestId }); + + // Check if user is superuser + const { data: profile, error: profileError } = await supabase + .from('user_profiles') + .select('role') + .eq('id', context.user.id) + .single(); + + if (profileError || profile?.role !== 'superuser') { + edgeLogger.warn('Unauthorized backfill attempt', { + userId: context.user.id, + requestId: context.requestId + }); + return new Response( + JSON.stringify({ error: 'Unauthorized: Superuser access required' }), + { status: 403, headers: { 'Content-Type': 'application/json' } } + ); + } + + // Execute the backfill function + const { data, error } = await supabase.rpc('backfill_park_locations'); + + if (error) { + edgeLogger.error('Error running park location backfill', { + error, + requestId: context.requestId + }); + throw error; + } + + edgeLogger.info('Park location backfill completed', { + results: data, + requestId: context.requestId + }); + + return new Response( + JSON.stringify({ + success: true, + ...data, + }), + { headers: { 'Content-Type': 'application/json' } } + ); + } +);