Pular para conteúdo

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:

  1. atualize a entidade apenas se o conceito pertence ao domínio;
  2. atualize fromFirestore/toFirestore e defaults seguros;
  3. preserve leitura de registros existentes quando a migração não for atômica;
  4. ajuste Rules, índices e Functions que escrevem o mesmo documento;
  5. 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.