Cookest
Arquitetura

Visão Geral da Arquitetura

Como o backend, a aplicação móvel e o pipeline ETL do Cookest se ligam entre si

Visão Geral da Arquitetura

O Cookest está organizado em três componentes independentes que comunicam via HTTP.

Diagrama de componentes

Componentes

API Rust (api/)

O núcleo da plataforma. Construída com Actix-Web 4 para processamento assíncrono de alto desempenho. Principais responsabilidades:

  • Autenticação baseada em JWT com par de tokens de acesso + atualização
  • Gestão de receitas (CRUD + favoritos + avaliações + registo de confeção)
  • Geração de planos de refeições semanais com pontuação por IA
  • Gestão de inventário/despensa com alertas de validade
  • Lista de compras com comparação de preços opcional
  • Chat com IA via Ollama (llava para visão PDF, modelo geral para chat)
  • Subscrição Stripe com idempotência de webhook

Aplicação Móvel Flutter (UI/)

Um cliente iOS/Android multiplataforma com um sistema de design de marca personalizado. Características principais:

  • Riverpod para toda a gestão de estado
  • GoRouter com uma rota shell de 5 separadores
  • Tipografia Playfair Display + Inter
  • Cor de marca verde-sálvia (#7A9A65) em toda a aplicação
  • Todas as chamadas à API são feitas através de classes de repositório usando Dio

Python ETL (etl/)

Um pipeline de ingestão de dados que processa dados externos de alimentos e nutrição e alimenta a base de dados PostgreSQL utilizada pela API.

Decisões de design importantes

Nível de subscrição no JWT

O nível de subscrição do utilizador (free / pro / family) está incorporado em cada token de acesso. Isto permite que o middleware da API restrinja funcionalidades Pro sem uma consulta à base de dados em cada pedido. O nível é relido da base de dados cada vez que o token é atualizado (TTL de 15 minutos).

Aprendizagem de preferências online

O PreferenceService aplica atualizações incrementais por gradiente descendente (taxa de aprendizagem 0.01) aos vetores de peso de culinária/ingrediente/dificuldade por utilizador sempre que um utilizador avalia ou conclui uma receita. Com o tempo, a geração de planos de refeições torna-se cada vez mais personalizada.

Migrações idempotentes

Todas as alterações de esquema utilizam CREATE TABLE IF NOT EXISTS e ALTER TABLE ... ADD COLUMN IF NOT EXISTS. As migrações são executadas automaticamente em cada arranque do servidor — seguro para todos os cenários de implementação.

Tokens de atualização SHA-256

Os tokens de atualização são armazenados na base de dados como sha256(raw_token). O token em bruto é mantido apenas pelo cliente num cookie httpOnly. Mesmo um dump completo da base de dados não pode ser utilizado para forjar sessões válidas.

Endpoints de administrador — BD, não JWT

As rotas exclusivas de administrador verificam sempre is_admin = true consultando a base de dados, independentemente do que as claims do JWT contenham.

On this page