From 7eb0b77d76112e9646a968d7f55a2418ee7f5db0 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:30:07 +0000 Subject: [PATCH] Fix console statement violations --- src/components/auth/AuthDiagnostics.tsx | 3 ++- src/hooks/moderation/useModerationFilters.ts | 4 ++-- src/hooks/moderation/usePagination.ts | 3 ++- src/hooks/useAuth.tsx | 3 ++- src/lib/moderation/actions.ts | 2 +- src/lib/requestTracking.ts | 7 ++++--- src/lib/sanitize.ts | 5 +++-- src/lib/submissionChangeDetection.ts | 6 +++--- src/lib/submissionItemsService.ts | 20 +++++++++----------- src/lib/testDataGenerator.ts | 5 +++-- 10 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/components/auth/AuthDiagnostics.tsx b/src/components/auth/AuthDiagnostics.tsx index a868d816..8f9c55d0 100644 --- a/src/components/auth/AuthDiagnostics.tsx +++ b/src/components/auth/AuthDiagnostics.tsx @@ -4,6 +4,7 @@ import { authStorage } from '@/lib/authStorage'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; +import { logger } from '@/lib/logger'; interface AuthDiagnosticsData { timestamp: string; @@ -55,7 +56,7 @@ export function AuthDiagnostics() { }; setDiagnostics(results); - console.log('[Auth Diagnostics]', results); + logger.debug('Auth diagnostics', { results }); }; useEffect(() => { diff --git a/src/hooks/moderation/useModerationFilters.ts b/src/hooks/moderation/useModerationFilters.ts index b1a321af..a79cc3dd 100644 --- a/src/hooks/moderation/useModerationFilters.ts +++ b/src/hooks/moderation/useModerationFilters.ts @@ -134,7 +134,7 @@ export function useModerationFilters( return JSON.parse(saved); } } catch (error: unknown) { - console.error('Failed to load persisted filters:', error); + logger.warn('Failed to load persisted filters', { error, storageKey }); } return null; @@ -153,7 +153,7 @@ export function useModerationFilters( } } } catch (error: unknown) { - console.error('Failed to load persisted sort:', error); + logger.warn('Failed to load persisted sort', { error, storageKey }); } return initialSortConfig; diff --git a/src/hooks/moderation/usePagination.ts b/src/hooks/moderation/usePagination.ts index 0168a1b2..6579e094 100644 --- a/src/hooks/moderation/usePagination.ts +++ b/src/hooks/moderation/usePagination.ts @@ -7,6 +7,7 @@ import { useState, useCallback, useEffect, useMemo } from 'react'; import { MODERATION_CONSTANTS } from '@/lib/moderation/constants'; import * as storage from '@/lib/localStorage'; +import { logger } from '@/lib/logger'; export interface PaginationConfig { /** Initial page number (1-indexed) */ @@ -123,7 +124,7 @@ export function usePagination(config: PaginationConfig = {}): PaginationState { return JSON.parse(saved); } } catch (error: unknown) { - console.error('Failed to load pagination state:', error); + logger.warn('Failed to load pagination state', { error, storageKey }); } return null; diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index 49a113cc..08992746 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -7,6 +7,7 @@ import { authLog, authWarn, authError } from '@/lib/authLogger'; import type { AALLevel, CheckAalResult } from '@/types/auth'; import { getSessionAal, checkAalStepUp as checkAalStepUpService, signOutUser } from '@/lib/authService'; import { clearAllAuthFlags } from '@/lib/sessionFlags'; +import { logger } from '@/lib/logger'; interface AuthContextType { user: User | null; @@ -256,7 +257,7 @@ export const AuthProvider = AuthProviderComponent; export function useAuth() { const context = useContext(AuthContext); if (context === undefined) { - console.error('[useAuth] AuthContext is undefined - component may be rendering outside AuthProvider'); + logger.error('AuthContext is undefined - component may be rendering outside AuthProvider', { component: 'useAuth' }); throw new Error('useAuth must be used within an AuthProvider'); } return context; diff --git a/src/lib/moderation/actions.ts b/src/lib/moderation/actions.ts index b7d33e5f..268e3352 100644 --- a/src/lib/moderation/actions.ts +++ b/src/lib/moderation/actions.ts @@ -564,7 +564,7 @@ export async function deleteSubmission( shouldRemoveFromQueue: true, }; } catch (error) { - console.error('Error deleting submission:', error); + logger.error('Error deleting submission', { error, submissionId: item.id }); return { success: false, message: 'Failed to delete submission', diff --git a/src/lib/requestTracking.ts b/src/lib/requestTracking.ts index 53b3dcd7..d8d67df2 100644 --- a/src/lib/requestTracking.ts +++ b/src/lib/requestTracking.ts @@ -7,6 +7,7 @@ import { supabase } from '@/integrations/supabase/client'; import { requestContext, type RequestContext } from './requestContext'; import { breadcrumbManager } from './errorBreadcrumbs'; import { captureEnvironmentContext } from './environmentContext'; +import { logger } from './logger'; export interface RequestTrackingOptions { endpoint: string; @@ -54,7 +55,7 @@ export async function trackRequest( parentRequestId: options.parentRequestId, traceId: context.traceId, }).catch(err => { - console.error('[RequestTracking] Failed to log metadata:', err); + logger.error('Failed to log request metadata', { error: err, context: 'RequestTracking' }); }); // Cleanup context @@ -94,7 +95,7 @@ export async function trackRequest( parentRequestId: options.parentRequestId, traceId: context.traceId, }).catch(err => { - console.error('[RequestTracking] Failed to log error metadata:', err); + logger.error('Failed to log error metadata', { error: err, context: 'RequestTracking' }); }); // Cleanup context @@ -143,7 +144,7 @@ async function logRequestMetadata(metadata: RequestMetadata): Promise { }); if (error) { - console.error('[RequestTracking] Failed to log metadata:', error); + logger.error('Failed to log metadata to database', { error, context: 'RequestTracking' }); } } diff --git a/src/lib/sanitize.ts b/src/lib/sanitize.ts index 7f4735cb..8bc7f256 100644 --- a/src/lib/sanitize.ts +++ b/src/lib/sanitize.ts @@ -6,6 +6,7 @@ */ import DOMPurify from 'dompurify'; +import { logger } from './logger'; /** * Sanitize HTML content to prevent XSS attacks @@ -39,14 +40,14 @@ export function sanitizeURL(url: string): string { const allowedProtocols = ['http:', 'https:', 'mailto:']; if (!allowedProtocols.includes(parsed.protocol)) { - console.warn(`Blocked potentially dangerous URL protocol: ${parsed.protocol}`); + logger.warn('Blocked potentially dangerous URL protocol', { protocol: parsed.protocol }); return '#'; } return url; } catch { // Invalid URL format - console.warn(`Invalid URL format: ${url}`); + logger.warn('Invalid URL format', { url }); return '#'; } } diff --git a/src/lib/submissionChangeDetection.ts b/src/lib/submissionChangeDetection.ts index 4c5559f2..e673bf43 100644 --- a/src/lib/submissionChangeDetection.ts +++ b/src/lib/submissionChangeDetection.ts @@ -349,7 +349,7 @@ export async function detectChanges( if (data?.name) entityName = `${data.name} (${formatEntityType(entityType)})`; } } catch (err) { - console.error('Error fetching entity name for photo operation:', err); + logger.error('Error fetching entity name for photo operation', { error: err, entityType: itemData.entity_type, entityId: itemData.entity_id }); } } @@ -395,7 +395,7 @@ export async function detectChanges( entityName = `${formatEntityType(entityType)} - ${itemData.title}`; } } catch (err) { - console.error('Error fetching entity name for milestone:', err); + logger.error('Error fetching entity name for milestone', { error: err, entityType: itemData.entity_type, entityId: itemData.entity_id }); // Fall back to just the title if database lookup fails if (itemData.title) { entityName = itemData.title; @@ -434,7 +434,7 @@ export async function detectChanges( } } } catch (err) { - console.error('Error resolving entity name for field display:', err); + logger.error('Error resolving entity name for field display', { error: err, entityType: itemData.entity_type, entityId: itemData.entity_id }); } // Add entity name as an explicit field change at the beginning diff --git a/src/lib/submissionItemsService.ts b/src/lib/submissionItemsService.ts index 08751d4e..8ede9b8a 100644 --- a/src/lib/submissionItemsService.ts +++ b/src/lib/submissionItemsService.ts @@ -338,9 +338,7 @@ async function createVersionForApprovedItem( // - app.current_user_id = original submitter // - app.submission_id = submission ID // Then the trigger creates the version automatically - console.debug( - `Version will be created automatically by trigger for ${itemType} ${entityId}` - ); + logger.debug('Version will be created automatically by trigger', { itemType, entityId }); } /** @@ -613,7 +611,7 @@ async function createRide(data: any, dependencyMap: Map, sortedI .eq('id', data.ride_id); if (error) { - console.error('Error updating ride:', error); + logger.error('Error updating ride', { error: error.message, rideId: data.ride_id }); throw new Error(`Database error: ${error.message}`); } @@ -644,7 +642,7 @@ async function createRide(data: any, dependencyMap: Map, sortedI .single(); if (error) { - console.error('Error creating ride:', error); + logger.error('Error creating ride', { error: error.message, rideName: resolvedData.name }); throw new Error(`Database error: ${error.message}`); } @@ -688,7 +686,7 @@ async function createCompany( .eq('id', data.id); if (error) { - console.error('Error updating company:', error); + logger.error('Error updating company', { error: error.message, companyId: data.id }); throw new Error(`Database error: ${error.message}`); } @@ -723,7 +721,7 @@ async function createCompany( .single(); if (error) { - console.error('Error creating company:', error); + logger.error('Error creating company', { error: error.message, companyName: resolvedData.name, companyType }); throw new Error(`Database error: ${error.message}`); } @@ -762,7 +760,7 @@ async function createRideModel(data: any, dependencyMap: Map, so .eq('id', data.ride_model_id); if (error) { - console.error('Error updating ride model:', error); + logger.error('Error updating ride model', { error: error.message, rideModelId: data.ride_model_id }); throw new Error(`Database error: ${error.message}`); } @@ -799,7 +797,7 @@ async function createRideModel(data: any, dependencyMap: Map, so .single(); if (error) { - console.error('Error creating ride model:', error); + logger.error('Error creating ride model', { error: error.message, modelName: resolvedData.name }); throw new Error(`Database error: ${error.message}`); } @@ -878,7 +876,7 @@ async function approvePhotos(data: any, dependencyMap: Map, user .select(); if (error) { - console.error('Error inserting photos:', error); + logger.error('Error inserting photos', { error: error.message, photoCount: photosToInsert.length, entityType, entityId: finalEntityId }); throw new Error(`Database error: ${error.message}`); } @@ -960,7 +958,7 @@ async function updateEntityFeaturedImage( } } } catch (error) { - console.error(`Error updating ${entityType} featured image:`, error); + logger.error('Error updating entity featured image', { error, entityType, entityId }); } } diff --git a/src/lib/testDataGenerator.ts b/src/lib/testDataGenerator.ts index 6d162963..6c3842d9 100644 --- a/src/lib/testDataGenerator.ts +++ b/src/lib/testDataGenerator.ts @@ -1,5 +1,6 @@ import { supabase } from '@/integrations/supabase/client'; import type { ParkSubmissionData, RideSubmissionData, CompanySubmissionData, RideModelSubmissionData } from '@/types/submission-data'; +import { logger } from './logger'; // Preset configurations export const PRESETS = { @@ -254,12 +255,12 @@ export async function clearTestData(): Promise<{ deleted: number }> { .neq('id', '00000000-0000-0000-0000-000000000000'); // Delete all records if (registryError) { - console.error('Error clearing test data registry:', registryError); + logger.error('Error clearing test data registry', { error: registryError }); } return { deleted: submissionCount }; } catch (error: unknown) { - console.error('Error clearing test data:', error instanceof Error ? error.message : String(error)); + logger.error('Error clearing test data', { error: error instanceof Error ? error.message : String(error) }); throw error; } }