Projeto de Aplicação Web Segura
Desenvolvimento Projeto de Aplicação Web Modularizada
Este projeto tem por objetivo verificar alguns pontos importantes para o desenvolvimento de projetos web, utilizando containers e uma configuração segura para a aplicação.
Objetivo
O grande objetivo desta atividade é desenvolver uma aplicação web modularizada, utilizando containers e uma configuração segura para a aplicação.
Mas Murilão você acabou de dizer isso!
Sim, mas não custa reforçar!
Agora vamos lá, frente nosso objetivo, acho que faz bastante sentido apresentar alguns objetivos específicos:
- Aplicação modularizada: A aplicação deve ser dividida em módulos, incluindo um front-end, um back-end, um banco de dados e um servidor web.
- Uso de containers: Cada módulo deve ser executado em um container separado, garantindo isolamento e organização.
- Configuração segura: A aplicação deve estar configurada em uma rede dedicada, expondo apenas as portas necessárias para o funcionamento.
- Acesso via navegador: A aplicação deve ser acessível por meio de um navegador web, hospedada em uma cloud comercial.
Requisitos
A aplicação deve atender aos seguintes requisitos funcionais e técnicos:
Funcionalidades Básicas
- Cadastro de usuários: Permitir que novos usuários sejam registrados no sistema.
- Autenticação de usuários: Implementar um sistema de login para validar as credenciais dos usuários.
- Listagem de usuários cadastrados: Exibir uma lista com todos os usuários registrados.
- Edição de usuários cadastrados: Permitir a atualização das informações dos usuários.
- Exclusão de usuários cadastrados: Permitir a remoção de usuários do sistema.
- Cadastro de produtos: Registrar novos produtos no sistema (o tipo de produto é livre).
- Listagem de produtos cadastrados: Exibir uma lista com todos os produtos registrados.
- Edição de produtos cadastrados: Permitir a atualização das informações dos produtos.
- Exclusão de produtos cadastrados: Permitir a remoção de produtos do sistema.
Requisitos Técnicos
- Front-end: Deve ser desenvolvido utilizando qualquer framework de sua escolha (ex.: React, Angular, Vue.js, etc.).
- Back-end: Deve ser desenvolvido utilizando GoLang com o framework Gin.
- Banco de dados: Utilizar PostgreSQL para armazenar os dados.
- Servidor web: Utilizar Nginx para servir a aplicação.
- Gerenciamento de usuários: Deve incluir, no mínimo, os seguintes campos:
- Nome do usuário;
- Email;
- Senha;
- Foto de perfil.
- Gerenciamento de produtos: Deve incluir, no mínimo, os seguintes campos:
- Imagem do produto;
- Valor;
- Quantidade;
- Descrição.
- Armazenamento de imagens: Implementar uma solução para armazenar as imagens (tanto de usuários quanto de produtos) no sistema.
Observações Importantes
- A aplicação deve ser modularizada, com cada módulo (front-end, back-end, banco de dados e servidor web) executado em um container separado.
- A aplicação deve ser configurada em uma rede dedicada, expondo apenas as portas necessárias para o funcionamento.
- A aplicação deve ser acessível por meio de um navegador web e hospedada em uma cloud comercial.
- Deve ser utilizada alguma tecnologia para armazenar as imagens (arquivos), ficando a critério de vocês como isso será realizado.
Esses requisitos foram definidos para simular um ambiente de desenvolvimento real, utilizando boas práticas de modularização, segurança e organização.
Avaliação

Imagem completamente não relacionada, ams que achei legal.
- O código fonte da solução deve estar disponível em um repositório público no Github (na branch main), em um diretório denominado src. Os módulos que compõe o seu código-fonte devem ser divididos em subdiretórios.
- As instruções para executar o projeto devem estar claramente discriminadas na documentação, com um link no README para que a seção possa ser prontamente acessada.
- As descrições de documentação devem estar no README do projeto.
Barema de Qualidade
[0,0 - 3,0] A atividade não foi bem implementada, a implementação não esta completa e sainda não é possível executar o sistema completamente.
[3,0 - 7,0] O projeto foi minimamente implementado e apresentado. Durante a apresentação, alguns conceitos não ficaram claramente apresentados.
[7,0 - 9,0] Durante a apresentação da solução, ela funcionou corretamente e todos os conceitos foram claramente implementados.
[9,0 - 10,0] Além do funcionamento e apresentação correta, foram implementados diferenciais na aplicação que fazem sentindo em sua implementação.