atualização defenições
This commit is contained in:
@@ -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)),
|
||||
|
||||
Reference in New Issue
Block a user