atualização defenições

This commit is contained in:
2026-03-03 16:06:59 +00:00
parent c5411c16fb
commit b62f357ade

View File

@@ -200,14 +200,14 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
// Inserir na BD se necessário (fora do setState)
if (needsInsert && shopId) {
const { error: insertErr } = await supabase.from('shops').insert([{
const { error: insertErr } = await supabase.from('shops').upsert([{
id: shopId,
name: shopNameToInsert,
address: 'Endereço a definir',
rating: 0,
}]);
if (insertErr && insertErr.code !== '23505') {
console.error('Erro ao inserir shop:', insertErr);
if (insertErr) {
console.error('Erro ao inserir/atualizar shop inicial:', insertErr);
}
}
};
@@ -442,8 +442,36 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
};
const updateShopDetails: AppContextValue['updateShopDetails'] = async (shopId, payload) => {
const { error } = await supabase.from('shops').update(payload).eq('id', shopId);
if (error) { console.error('updateShopDetails error:', error); return; }
// 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();
// Se o supabase mandar um erro, mandamos o erro para fora para a UI apanhar
if (error) {
console.error('updateShopDetails error:', error);
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).
// 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)...');
const existingShopLocal = state.shops.find(s => s.id === shopId);
const { error: upsertErr } = await supabase.from('shops').upsert({
id: shopId,
name: existingShopLocal?.name || 'Barbearia',
address: existingShopLocal?.address || 'Endereço a definir',
rating: 0,
...payload
});
if (upsertErr) {
console.error('Falha crítica ao forçar insert da loja:', upsertErr);
throw upsertErr;
}
}
// Se tudo correr bem, atualiza o estado local
setState((s) => ({
...s,
shops: s.shops.map((shop) => (shop.id === shopId ? { ...shop, ...payload } : shop)),