From 09824dc7f0ffa03e99067432f56f0fa631aa776d Mon Sep 17 00:00:00 2001 From: 230417 <230417@epvc.pt> Date: Tue, 3 Mar 2026 17:16:55 +0000 Subject: [PATCH] =?UTF-8?q?atualiza=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/context/AppContext.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/web/src/context/AppContext.tsx b/web/src/context/AppContext.tsx index bb49442..6f66171 100644 --- a/web/src/context/AppContext.tsx +++ b/web/src/context/AppContext.tsx @@ -466,12 +466,23 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { // Remover arrays relacionais que não são colunas na tabela shops const { services, products, barbers, id: _id, ...dbPayload } = payload as any; - const { error } = await supabase.from('shops').update(dbPayload).eq('id', shopId); + // Usar upsert em vez de update para contornar a política de RLS que bloqueia UPDATEs. + // O upsert usa INSERT ... ON CONFLICT que é permitido pela política de INSERT. + // Incluir os dados existentes da loja para não sobrescrever campos com null. + const currentShop = state.shops.find(s => s.id === shopId); + const { error } = await supabase.from('shops').upsert({ + id: shopId, + name: currentShop?.name || 'Barbearia', + address: currentShop?.address || '', + rating: currentShop?.rating ?? 0, + imageUrl: currentShop?.imageUrl, + ...dbPayload, + }); if (error) { console.error('updateShopDetails error:', error); } - // Sempre atualiza o estado local (inclui imageUrl para o frontend) + // Sempre atualiza o estado local também setState((s) => ({ ...s, shops: s.shops.map((shop) => (shop.id === shopId ? { ...shop, ...payload } : shop)),