Definição Tecnológica - ES2-UFPI/EsqueceramAI GitHub Wiki

4. Definição Tecnológica

4.1 Frontend — HTML, CSS e JavaScript

O frontend será desenvolvido com HTML, CSS e JavaScript.

Justificativa

A escolha é adequada ao formato de aplicação web e apresenta baixa complexidade inicial. Permite criar formulários, filtros, consultas, upload de imagens e integração com a API REST diretamente pelo navegador.

4.2 Backend — Python + Flask

O backend será desenvolvido em Python utilizando Flask.

Justificativa

A escolha considera o escopo do projeto e o conhecimento técnico disponível na equipe.

O Flask oferece:

  • simplicidade de desenvolvimento;
  • baixa complexidade inicial;
  • facilidade para criação de APIs REST;
  • integração com PostgreSQL;
  • amplo ecossistema de bibliotecas;
  • facilidade para testes;
  • facilidade para implementar os padrões de projeto utilizados;
  • possibilidade de organizar o código em Controllers, Services e Repositories.

Java com Spring Boot seria uma alternativa tecnicamente robusta, mas adicionaria complexidade caso a equipe não possua domínio da tecnologia. Para a escala esperada do projeto acadêmico, o desempenho do Flask é considerado suficiente.

4.3 Banco de Dados — PostgreSQL

O PostgreSQL será utilizado como banco relacional.

Justificativa

  • modelagem relacional robusta;
  • integridade referencial;
  • suporte a transações;
  • propriedades ACID;
  • consultas estruturadas;
  • integração com Python;
  • adequado aos relacionamentos entre usuários, itens, matches, postos e recompensas.

4.4 Firebase Storage

O Firebase Storage será utilizado para armazenar fotografias dos itens.

O Storage é um bucket do Google Cloud Storage integrado ao Firebase, apropriado para arquivos enviados pelos usuários. As imagens não serão armazenadas diretamente como arquivos binários no PostgreSQL. O banco mantém os dados estruturados e o caminho do objeto no bucket, como items/{item_id}/{uuid}.jpg.

O backend Flask utilizará o Firebase Admin SDK para enviar as imagens. A credencial de serviço ficará somente no backend, nunca no navegador. A aplicação deve validar tamanho e tipo MIME antes do upload e não deve tornar o bucket inteiro público. Para exibir uma imagem, o backend deve fornecer uma URL de download conforme a política de acesso definida pela equipe.

O Cloud Storage for Firebase exige atualmente o plano Blaze, com faturamento vinculado. O nome do bucket deve ser obtido no console do Firebase; buckets novos normalmente usam o formato PROJECT_ID.firebasestorage.app, enquanto buckets legados podem usar PROJECT_ID.appspot.com. O valor usado pelo Admin SDK não deve conter o prefixo gs://.

4.5 Firebase Cloud Messaging

O Firebase Cloud Messaging (FCM) será utilizado para notificações.

O backend poderá acionar o FCM quando houver um evento relevante, como a identificação de um possível match.