refactor: simplify UserContext and supabaseClient
- Refactored UserContext.tsx (67 lines simplified) - Simplified supabaseClient.ts (82 lines reduced) - Updated .env.development for local dev
This commit is contained in:
parent
de78090963
commit
341c551ea5
@ -1,3 +1,4 @@
|
||||
VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzcxODE3MjE5LCJpc3MiOiJzdXBhYmFzZSIsInN1YiI6IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIsImV4cCI6MzM0ODYxNzIxOSwicm9sZSI6ImFub24ifQ.JbmQOTOBAzpBJ9JttOrGlo_JTXDXhCjYMjKiFvRkaNQ
|
||||
PORT_FRONTEND=5173
|
||||
PORT_FRONTEND_HMR=3002
|
||||
PORT_API=8000
|
||||
@ -15,7 +16,6 @@ VITE_APP_HMR_URL=http://192.168.0.94:5173
|
||||
|
||||
# Supabase is on external container - use its IP
|
||||
VITE_SUPABASE_URL=http://192.168.0.155:8000
|
||||
VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzcxODE3MjE5LCJpc3MiOiJzdXBhYmFzZSIsInN1YiI6IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIsImV4cCI6MzM0ODYxNzIxOSwicm9sZSI6ImFub24ifQ.JbmQOTOBAzpBJ9JttOrGlo_JTXDXhCjYMjKiFvRkaNQ
|
||||
|
||||
# API should use localhost for local development
|
||||
VITE_API_URL=http://192.168.0.94:8000
|
||||
|
||||
@ -8,9 +8,6 @@ import { DatabaseNameService } from '../services/graph/databaseNameService';
|
||||
import { provisionUser } from '../services/provisioningService';
|
||||
import { storageService, StorageKeys } from '../services/auth/localStorageService';
|
||||
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
|
||||
|
||||
export interface UserContextType {
|
||||
user: CCUser | null;
|
||||
loading: boolean;
|
||||
@ -32,9 +29,9 @@ export const UserContext = createContext<UserContextType>({
|
||||
preferences: {},
|
||||
isMobile: false,
|
||||
isInitialized: false,
|
||||
updateProfile: async () => { },
|
||||
updatePreferences: async () => { },
|
||||
clearError: () => { }
|
||||
updateProfile: async () => {},
|
||||
updatePreferences: async () => {},
|
||||
clearError: () => {}
|
||||
});
|
||||
|
||||
export const UserProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
@ -128,32 +125,16 @@ export const UserProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
clientType: 'authenticated'
|
||||
});
|
||||
|
||||
// Try direct fetch instead of Supabase client to bypass hanging issue
|
||||
logger.debug('user-context', '🔧 Step 5b1: About to make profiles query with direct fetch...', {
|
||||
logger.debug('user-context', '🔧 Step 5b1: About to make profiles query...', {
|
||||
userId: userInfo.id,
|
||||
queryStarted: true
|
||||
});
|
||||
|
||||
const { data, error } = await fetch(`${supabaseUrl}/rest/v1/profiles?select=*&id=eq.${userInfo.id}`, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${supabaseAnonKey}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
.then(async (response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
||||
}
|
||||
const result = await response.json();
|
||||
return { data: result[0] || null, error: null };
|
||||
})
|
||||
.catch((err) => {
|
||||
logger.debug('user-context', '🔧 Step 5b1: Direct fetch failed', {
|
||||
userId: userInfo?.id,
|
||||
error: err.message
|
||||
});
|
||||
return { data: null, error: { message: err.message, code: 'FETCH_ERROR' } };
|
||||
});
|
||||
const { data, error } = await supabase
|
||||
.from('profiles')
|
||||
.select('*')
|
||||
.eq('id', userInfo.id)
|
||||
.single();
|
||||
|
||||
logger.debug('user-context', '🔧 Step 5b2: Direct fetch completed...', {
|
||||
userId: userInfo.id,
|
||||
|
||||
@ -4,26 +4,16 @@ import { logger } from './debugConfig';
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
|
||||
|
||||
logger.info('supabase-client', '🔄 Supabase configuration', {
|
||||
url: supabaseUrl,
|
||||
key: supabaseAnonKey,
|
||||
});
|
||||
|
||||
if (!supabaseUrl || !supabaseAnonKey) {
|
||||
logger.error('supabase-client', '❌ Missing Supabase configuration', {
|
||||
hasUrl: !!supabaseUrl,
|
||||
hasKey: !!supabaseAnonKey,
|
||||
});
|
||||
throw new Error('Missing Supabase configuration');
|
||||
}
|
||||
|
||||
// Lazy-loaded Supabase client instance for non-auth operations
|
||||
let supabaseInstance: SupabaseClient | null = null;
|
||||
logger.info('supabase-client', '🔄 Initializing Supabase client', {
|
||||
url: supabaseUrl,
|
||||
hasKey: !!supabaseAnonKey,
|
||||
});
|
||||
|
||||
const getSupabaseClient = () => {
|
||||
if (!supabaseInstance) {
|
||||
logger.info('supabase-client', '🔄 Initializing Supabase client');
|
||||
supabaseInstance = createClient(
|
||||
export const supabase: SupabaseClient = createClient(
|
||||
supabaseUrl,
|
||||
supabaseAnonKey,
|
||||
{
|
||||
@ -41,28 +31,8 @@ const getSupabaseClient = () => {
|
||||
'X-Client-Info': 'classroom-copilot',
|
||||
},
|
||||
},
|
||||
// Allow JWT issuer mismatch for local development
|
||||
db: {
|
||||
schema: 'public'
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Log configuration in development
|
||||
logger.info('supabase-client', '🔄 Supabase client configuration loaded', {
|
||||
url: supabaseUrl,
|
||||
hasKey: !!supabaseAnonKey,
|
||||
storageKey: 'supabase.auth.token'
|
||||
});
|
||||
}
|
||||
return supabaseInstance;
|
||||
};
|
||||
|
||||
// Export a proxy that will lazy load the client when needed
|
||||
export const supabase = new Proxy({} as SupabaseClient, {
|
||||
get: (target, prop) => {
|
||||
const client = getSupabaseClient();
|
||||
return client[prop as keyof SupabaseClient];
|
||||
}
|
||||
});
|
||||
|
||||
);
|
||||
Loading…
x
Reference in New Issue
Block a user