Domínio e dados¶
Pacotes compartilhados¶
aivaleu_domain¶
Publica o vocabulário do sistema. As interfaces de repository permitem testar regras sem Firebase. As entidades mais centrais são:
| Entidade | Estados ou discriminações |
|---|---|
UserEntity |
roles client, partnerAdmin, superAdmin |
OfferEntity |
origem regular|campaign; tier free|premium; sete estados |
CouponRedemptionEntity |
active, waitingCheckin, used, expired, cancelled |
CampaignEntity |
draft, scheduled, openForPartners, active, ended, archived, cancelled |
CampaignParticipationEntity |
invited, interested, submitted, approved, rejected, withdrawn |
PremiumEntitlement |
origem e status de acesso Premium |
StoreEntity, PartnerEntity, WaiterEntity |
catálogo físico e operação do parceiro |
Os casos de uso fazem validações locais rápidas e delegam persistência. Autoridade de segurança e invariantes concorrentes continuam no backend.
aivaleu_data¶
Implementa Auth, stores, catálogo, ofertas, cupons, campanhas, Premium, indicação, integrações e garçons. Seus modelos traduzem snake_case, camelCase, enums e timestamps legados para as entidades.
Uma chamada típica atravessa:
OfferDetailsCubit
→ CreateCouponRedemptionUseCase
→ CouponRepository
→ CouponRepositoryImpl
→ FirebaseFunctions.httpsCallable('createCouponRedemption')
→ coupon_redemptions + offers (transação)
aivaleu_core e aivaleu_ui¶
aivaleu_core oferece RemoteConfigService, AppLogger e infraestrutura comum. aivaleu_ui concentra tema, badges, cards, banners e layouts reutilizáveis. A UI pode depender do domínio para renderizar entidades, mas não deve decidir autorização ou gravar dados.
Contratos de repository¶
| Interface | Operações principais | Adaptador |
|---|---|---|
AuthRepository |
sessão, e-mail/senha, OTP, cadastro, perfil, exclusão | Firebase Auth + users + callable de exclusão |
OfferRepository |
streams de curadoria, feed, curar e criação administrativa | offers, getOfferFeed, curateOffer, createOfferAsAdmin |
CouponRepository |
criar, ativar, cancelar, usar, observar e consultar cooldown | coupon_redemptions + callables |
CampaignRepository |
CRUD/status administrativo e streams | campaigns + callables administrativas |
PartnerCampaignRepository |
aderir, desistir, submeter e observar | campaign_participations, offers + callables |
StoreRepository / ProductRepository |
unidades e catálogo | stores; ofertas são o catálogo atual |
WaiterRepository |
garçons, login, fila e confirmação | waiters, coupon_redemptions, callables |
PremiumRepository |
entitlement, Checkout e Portal | users, referral_rewards, Stripe callables |
Mapeamento e compatibilidade¶
Os modelos em packages/aivaleu_data/lib/src/models são a fronteira para Firestore. Eles aceitam campos legados onde o código declara compatibilidade. Para evoluir um documento:
- atualize a entidade apenas se o conceito pertence ao domínio;
- atualize
fromFirestore/toFirestoree defaults seguros; - preserve leitura de registros existentes quando a migração não for atômica;
- ajuste Rules, índices e Functions que escrevem o mesmo documento;
- teste round-trip e repositories.
Remote Config¶
RemoteConfigService controla apresentação e versionamento, não autorização. As chaves comprovadas são:
| Chave | Default local | Uso |
|---|---|---|
premium_launch_enabled |
true |
seleciona apresentação/plano de lançamento |
latest_app_version_android |
vazio | aviso de atualização Android |
latest_app_version_ios |
vazio | aviso de atualização iOS |
app_changelog |
{} |
conteúdo por versão |
Uma indisponibilidade de Remote Config mantém os defaults. Premium real depende de entitlement persistido e validação backend.