'use server'; import { createServerClient, type Profile } from '@/utils/supabase'; import { getSignedUrl, getUser } from '@/lib/hooks'; import type { Result } from '.'; export const getProfile = async ( userId: string | null = null ): Promise> => { try { if (userId === null) { const user = await getUser(); if (!user.success || user.data === undefined) throw new Error('User not found'); userId = user.data.id; } const supabase = await createServerClient(); const { data, error } = await supabase .from('profiles') .select('*') .eq('id', userId) .single(); if (error) throw error; if (data.avatar_url) { const avatarUrl = await getSignedUrl({ bucket: 'avatars', url: data.avatar_url, transform: { width: 128, height: 128 }, }); if (avatarUrl.success) { data.avatar_url = avatarUrl.data; } } return { success: true, data: data as Profile }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : 'Unknown error getting profile', }; } }; type updateProfileProps = { full_name?: string; email?: string; avatar_url?: string; provider?: string }; export const updateProfile = async ({ full_name, email, avatar_url, provider, }: updateProfileProps): Promise> => { try { if ( full_name === undefined && email === undefined && avatar_url === undefined && provider === undefined ) throw new Error('No profile data provided'); const userResponse = await getUser(); if (!userResponse.success || userResponse.data === undefined) throw new Error('User not found'); const supabase = await createServerClient(); const { data, error } = await supabase .from('profiles') .update({ ...(full_name !== undefined && { full_name }), ...(email !== undefined && { email }), ...(avatar_url !== undefined && { avatar_url }), ...(provider !== undefined && { provider }), }) .eq('id', userResponse.data.id) .select() .single(); if (error) throw error; if (data.avatar_url) { const avatarUrl = await getSignedUrl({ bucket: 'avatars', url: data.avatar_url, transform: { width: 128, height: 128 }, }); if (avatarUrl.success) data.avatar_url = avatarUrl.data; } return { success: true, data: data as Profile, }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : 'Unknown error updating profile', }; } };