- Autenticação: login com e-mail (check-email → senha ou criar conta), signup com nome e senha.
- Onboarding: tela de seleção de território após login/cadastro quando não há território salvo.
- Lista “Próximos a você” (sugeridos por lat/lng).
- Seleção na lista só altera o mapa e o destaque; o botão Continuar é o único que conclui o onboarding e leva ao feed.
- Contorno do território e pin no mapa em verde floresta.
- Botão Voltar (logout e retorno à tela de login/cadastro).
- Feed: listagem do feed do território selecionado, com paginação e pull-to-refresh.
- Explorar: troca de território (lista paginada); ao “entrar” em outro território, o feed e o mapa refletem o escolhido.
- Mapa: pins do território, contorno (polígono/círculo) em verde floresta, marcador do usuário.
- Eventos: lista de eventos do território, interesse e confirmação de presença.
- Perfil: exibição e edição de nome e bio; preferências de notificação (estrutura).
- Publicar: criação de post (título, conteúdo, tipo, visibilidade) no território ativo.
Release estável: App, Onboarding e Stack Local
Este documento descreve a versão estável atual do app (Flutter), do fluxo de onboarding, das correções de backend e dos procedimentos para rodar o projeto localmente. Serve como referência para quem está chegando ao repositório e para evolução incremental.
O que está implementado
- API: autenticação (check-email, login, signup), jornadas (onboarding, feed, territórios, eventos, perfil, notificações), migração única Postgres com extensão
pgcryptoe DEFAULTs paraRowVersion. - BFF: proxy para a API por jornadas (
/api/v2/journeys/*), tratamento de 502 com mensagem clara quando a API fecha a conexão prematuramente.
- Stack local:
scripts/run-local-stack.ps1sobe API (Docker), BFF (dotnet) e opcionalmente o app Flutter; aplica migrações e executa seeds (Camburi + Boiçucanga) com encoding UTF-8. - Seed: ingestão via SQL (
scripts/seed/seed-camburi.sql,seed-boicucanga.sql) comdocker cp+psql -fpara preservar acentos.
Como rodar o projeto (getting started)
Pré-requisitos
- Docker (para API + Postgres)
- .NET SDK (para BFF)
- Flutter (para o app)
- PowerShell (Windows) para os scripts
-
Subir API + BFF (e seed)
Na raiz do repositório:.\scripts\run-local-stack.ps1- Na primeira execução, a API aplica a migração única no Postgres e o script roda os seeds Camburi e Boiçucanga.
- Para recriar o banco do zero (útil após mudanças de schema):
.\scripts\run-local-stack.ps1 -ResetDatabase -
Rodar o app Flutter
Em outro terminal:cd frontend\Arah.app flutter runOu use o script do projeto que define
BFF_BASE_URL(ex.:http://localhost:5001). -
Fluxo típico no app
Abrir o app → informar e-mail (check-email) → criar conta ou entrar com senha → onboarding: escolher território na lista (mapa atualiza), tocar em Continuar → feed do território. Em Explorar é possível trocar de território.
Detalhes dos seeds e variáveis de ambiente: scripts/seed/README.md.
Mudanças e correções desta release
- Migração única
Toda a criação de schema e ajustes ficam em uma única migração (UnifiedInitialCreate), incluindo:- Extensão pgcrypto (
CREATE EXTENSION IF NOT EXISTS pgcrypto) para uso degen_random_bytes(). - Índice único em
territory_memberships: um Resident por usuário (filtroRole = 2), permitindo vários Visitor por usuário. - DEFAULT
gen_random_bytes(8)para as colunas RowVersion emterritory_membershipsecommunity_posts, evitando NOT NULL violation no INSERT.
- Extensão pgcrypto (
- DbContext (EF)
Configuração deRowVersioncomHasDefaultValueSql("gen_random_bytes(8)").ValueGeneratedOnAdd()emSharedDbContexteArapongaDbContextpara membership; emArapongaDbContextparacommunity_posts, para o EF não enviar o valor no INSERT. - SharedDbContext
Índice único parcial de membership corrigido para filtroRole = 2(Resident), alinhado à migração.
BFF
- 502 quando a API fecha a conexão
Mensagem e hint em português quando a resposta termina prematuramente, orientando a verificar se a API está rodando e a checar os logs.
- Onboarding
- Seleção na lista apenas atualiza o território exibido no mapa e o destaque do card; apenas o botão Continuar conclui o onboarding.
- Mapa usa o território selecionado (ou o mais próximo como padrão).
- Botão Voltar faz logout e limpa território, retornando à tela de login/cadastro (com
addPostFrameCallbackpara evitar conflito com o redirect do router).
- Visual
- Contorno do polígono/círculo do território e pin do território em verde floresta (
#228B22) na tela de onboarding e no mapa.
- Contorno do polígono/círculo do território e pin do território em verde floresta (
- Encoding UTF-8
Seeds executados comdocker cp+psql -fePGCLIENTENCODING=UTF8; arquivos SQL comSET client_encoding = 'UTF8';para preservar acentos (ex.: Boiçucanga, São). - Seed
Execução automática deseed-camburi.sqleseed-boicucanga.sqlpelorun-local-stack.ps1após subir os containers.
Evolução planejada, em ordem de prioridade sugerida:
| Área | O que falta |
|---|---|
| Mídia / imagens | Fotos e mídia nos posts (upload, exibição). |
| Interações no feed | Curtir (like), comentar, compartilhar. |
| Gestão de posts | Excluir o próprio post. |
| Filtros | Opções para filtrar o feed (por tipo, tags, etc.) e preferência de o que filtrar. |
| Preferências no perfil | Definir interesses/preferências do usuário para uso em filtros e sugestões. |
| Tipo de post | Escolher tipo ao publicar (ex.: geral, alerta, evento) de forma explícita na UI. |
| Marketplace | Lojas, listagens, carrinho, checkout no app. |
O backend já cobre parte dessas capacidades (feed, eventos, perfil, notificações); o app será evoluído aos poucos para expor essas funcionalidades.
- Índice geral: docs/00_INDEX.md (quando existir) ou README.md.
- Desenvolvimento e setup: DEVELOPMENT.md, SETUP.md.
- Seeds: scripts/seed/README.md.
- Stack local: comentários no início de scripts/run-local-stack.ps1.
- Visão e roadmap: README.md (seção Estado do Projeto e Fases).