app/src/services/auth/profileService.ts
2025-07-11 13:21:49 +00:00

87 lines
2.1 KiB
TypeScript

import { TLUserPreferences } from '@tldraw/tldraw';
import { supabase } from '../../supabaseClient';
import { logger } from '../../debugConfig';
import { CCUser } from './authService';
export type UserProfile = CCUser;
export interface UserProfileUpdate extends Partial<UserProfile> {
id: string; // ID is always required for updates
}
export interface UserPreferences {
tldraw?: TLUserPreferences;
theme?: 'light' | 'dark' | 'system';
notifications?: boolean;
}
export async function createUserProfile(profile: UserProfile): Promise<UserProfile | null> {
try {
const { data, error } = await supabase
.from('profiles')
.insert([profile])
.select()
.single();
if (error) {
logger.error('supabase-profile-service', '❌ Failed to create user profile', {
userId: profile.id,
error
});
throw error;
}
return data;
} catch (error) {
logger.error('supabase-profile-service', '❌ Error in createUserProfile', error);
return null;
}
}
export async function getUserProfile(userId: string): Promise<UserProfile | null> {
try {
const { data, error } = await supabase
.from('profiles')
.select('*')
.eq('id', userId)
.single();
if (error) {
logger.error('supabase-profile-service', '❌ Failed to fetch user profile', {
userId,
error
});
throw error;
}
return data;
} catch (error) {
logger.error('supabase-profile-service', '❌ Error in getUserProfile', error);
return null;
}
}
export async function updateUserProfile(update: UserProfileUpdate): Promise<UserProfile | null> {
try {
const { data, error } = await supabase
.from('profiles')
.update(update)
.eq('id', update.id)
.select()
.single();
if (error) {
logger.error('supabase-profile-service', '❌ Failed to update user profile', {
userId: update.id,
error
});
throw error;
}
return data;
} catch (error) {
logger.error('supabase-profile-service', '❌ Error in updateUserProfile', error);
return null;
}
}