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.