diff --git a/web/src/context/AppContext.tsx b/web/src/context/AppContext.tsx index c11955a..163940c 100644 --- a/web/src/context/AppContext.tsx +++ b/web/src/context/AppContext.tsx @@ -442,8 +442,21 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { }; const updateShopDetails: AppContextValue['updateShopDetails'] = async (shopId, payload) => { + // Preparar os dados para o Supabase: remover arrays relacionais que não existem como colunas na tabela shops + const dbPayload: any = { ...payload }; + delete dbPayload.services; + delete dbPayload.products; + delete dbPayload.barbers; + delete dbPayload.id; // Não atualizar a primary key acidentalmente + + // Mapear imageUrl para image_url (o Supabase usa snake_case em colunas por padrão, então isto resolve ambos os casos) + if (dbPayload.imageUrl !== undefined) { + dbPayload.image_url = dbPayload.imageUrl; + delete dbPayload.imageUrl; + } + // Executa o update na Base de Dados e pede de volta a linha modificada para sabermos se o update afetou 0 linhas - const { data, error } = await supabase.from('shops').update(payload).eq('id', shopId).select(); + const { data, error } = await supabase.from('shops').update(dbPayload).eq('id', shopId).select(); // Se o supabase mandar um erro, mandamos o erro para fora para a UI apanhar if (error) { @@ -451,7 +464,7 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { throw error; } - // Se o update funcionou mas não afetou nenhuma linha (data.length === 0), significa que a loja NUNCA foi inserida com sucesso no registo antes (talvez por RLS ou porque o trigger não funcionou). + // Se o update funcionou mas não afetou nenhuma linha (data.length === 0), significa que a loja NUNCA foi inserida com sucesso no registo. // Neste caso, forçamos um UPSERT completo! if (data && data.length === 0) { console.warn('A loja não existia na base de dados! Forçando a criação (upsert)...'); @@ -462,7 +475,7 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { name: existingShopLocal?.name || 'Barbearia', address: existingShopLocal?.address || 'Endereço a definir', rating: 0, - ...payload + ...dbPayload }); if (upsertErr) {