hogar compartido: colaboracion entre cuentas sobre Firestore
CloudKit sincroniza la base privada de un Apple ID: ni llega a Android ni deja que dos cuentas editen el mismo plan (CKShare sigue sin existir en SwiftData). El contenido de un hogar pasa por tanto a Firestore, y un dispositivo que entra en un hogar construye el store local sin CloudKit — dos espejos escribiendo los mismos objetos se pelean, que es justo lo que ya obligó a apagar el sync por iCloud KV. SwiftData sigue siendo el store local y el modo offline; HouseholdSyncService es lo unico que habla con la red. Detecta cambios comparando una huella del contenido de cada documento con la ultima sincronizada (el "shadow"), asi que no hace falta instrumentar con updatedAt las treinta vistas que mutan modelos. Los borrados van como tombstone: un borrado duro volveria desde cualquier miembro que estuviera sin conexion. Semanas y slots usan id derivado del contenido (2026-09-14, 5-dinner) para que dos miembros que abren la misma semana escriban el mismo documento en vez de crear dos, y para que los conflictos se resuelvan por slot y no por semana. Incluye reglas de seguridad (solo miembros; los codigos de invitacion se pueden leer por id pero no listar), pantalla de hogar en Ajustes con Sign in with Apple, invitacion por codigo de 6 caracteres sin vocales ni 0/O/1/I, y la eleccion al unirse entre llevarse los platos propios o adoptar los del hogar. Fuera de esta fase: fotos de platos (necesitan Storage) y el cliente Android. Refs #33 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013su1ttRiMeMYxkZJ1Y3246
This commit is contained in:
@@ -478,3 +478,40 @@
|
||||
"week_schedule_warning_confirm" = "Remover mesmo assim";
|
||||
"toast_week_schedule_updated" = "Semana atualizada";
|
||||
"toast_week_schedule_reset" = "Semana de volta às configurações gerais";
|
||||
|
||||
/* Hogar compartido (2.2) */
|
||||
"household_title" = "Casa compartilhada";
|
||||
"household_section" = "Casa";
|
||||
"household_settings_footer" = "Planejem a semana juntos, cada um pela sua conta. Funciona também no Android.";
|
||||
"household_intro" = "Uma casa permite que várias pessoas planejem a mesma semana, com os pratos e a lista de compras em comum.";
|
||||
"household_sign_in_footer" = "Para compartilhar é preciso entrar. Seus pratos continuam sendo seus: ninguém fora da sua casa os vê.";
|
||||
"household_create_section" = "Criar uma casa";
|
||||
"household_create" = "Criar casa";
|
||||
"household_name_placeholder" = "Nome da casa (ex.: Casa)";
|
||||
"household_create_footer" = "Seus pratos, etiquetas e semanas atuais viram o ponto de partida da casa.";
|
||||
"household_create_premium_footer" = "Criar uma casa é Premium. Quem recebe o convite não precisa pagar.";
|
||||
"household_join_section" = "Entrar em uma casa";
|
||||
"household_join" = "Entrar com o código";
|
||||
"household_code_placeholder" = "Código de convite";
|
||||
"household_join_footer" = "Peça o código a quem criou a casa. Ele expira em 7 dias.";
|
||||
"household_join_choice_title" = "E os seus pratos?";
|
||||
"household_join_choice_message" = "Você pode levar para esta casa os pratos e semanas que já tem, ou começar só com os da casa.";
|
||||
"household_join_choice_merge" = "Levar meus pratos";
|
||||
"household_join_choice_replace" = "Usar só os da casa";
|
||||
"household_members_section" = "Integrantes";
|
||||
"household_member_you" = "você";
|
||||
"household_member_unnamed" = "Sem nome";
|
||||
"household_invite_section" = "Convite";
|
||||
"household_invite_footer" = "Compartilhe este código com quem vai planejar com você.";
|
||||
"household_invite_share" = "Entre na minha casa do MealMood com o código %@ — https://mealmood.app";
|
||||
"household_invite_expires" = "Expira em %@";
|
||||
"household_invite_regenerate" = "Gerar um código novo";
|
||||
"household_leave" = "Sair da casa";
|
||||
"household_leave_confirm_title" = "Sair da casa?";
|
||||
"household_leave_confirm_message" = "Você deixará de ver e editar os pratos e as semanas da casa neste dispositivo.";
|
||||
"household_leave_confirm_confirm" = "Sair";
|
||||
"household_relaunch_needed" = "Feche e abra o MealMood de novo para concluir a mudança.";
|
||||
"household_error_not_signed_in" = "Entre na sua conta antes de criar ou entrar em uma casa.";
|
||||
"household_error_no_household" = "Este dispositivo não pertence a nenhuma casa.";
|
||||
"household_error_invalid_code" = "Esse código não existe.";
|
||||
"household_error_expired_code" = "Esse código expirou. Peça um novo.";
|
||||
|
||||
Reference in New Issue
Block a user