Munça da UI de inicio | escovagem semanal adicionada | quantidade de videos assistidos | todos os videos na nuvem | possibilidade de continuar o video de onde parou

This commit is contained in:
Carlos Correia
2026-07-09 15:31:59 +01:00
parent 67b580778a
commit 9fb2840529
14 changed files with 1584 additions and 381 deletions

View File

@@ -33,34 +33,29 @@ class _SettingsBodyState extends State<SettingsBody> {
context,
title: 'Apagar dados da conta',
message:
'Isso remove permanentemente seu perfil, crianças cadastradas e '
'fotos. Essa ação não pode ser desfeita. Deseja continuar?',
'Isso remove permanentemente a sua conta, perfil, crianças '
'cadastradas e fotos — incluindo o login, permitindo criar uma '
'nova conta com o mesmo e-mail depois. Essa ação não pode ser '
'desfeita. Deseja continuar?',
confirmLabel: 'Apagar',
confirmColor: _accentPink,
);
if (confirmed != true) return;
final uid = supabase.auth.currentUser?.id;
if (uid == null) return;
setState(() => _deletingAccount = true);
try {
await supabase.from('children').delete().eq('owner_id', uid);
// O Supabase não avisa quando uma política de RLS bloqueia silenciosamente
// uma operação: sem `.select()` para devolver as linhas apagadas não há
// como distinguir "0 linhas existiam" de "sem permissão para apagar".
final deletedProfile = await supabase
.from('profiles')
.delete()
.eq('id', uid)
.select('id');
if (deletedProfile.isEmpty) {
// A remoção de `auth.users` exige a service role key, que o app nunca
// deve carregar — por isso corre numa Edge Function (server-side); ver
// supabase/functions/delete-account. Sem isto, apagar só as linhas de
// `profiles`/`children` deixava o e-mail "ocupado" no Supabase Auth,
// impedindo criar uma nova conta com o mesmo e-mail.
final response = await supabase.functions.invoke('delete-account');
final data = response.data;
final errorMessage = (data is Map) ? data['error']?.toString() : null;
if (response.status != 200 || errorMessage != null) {
throw StateError(
'A base de dados recusou apagar o perfil (sem política de RLS '
'para DELETE). Os dados não foram removidos.',
errorMessage ?? 'Erro ao apagar conta (status ${response.status})',
);
}