Skip to content

Desafio MVC (semana 20/06 ~ 01/07/2022) - Projeto Palmirinha Onofre - Programa GFT Start

Notifications You must be signed in to change notification settings

didifive/desafio-mvc-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DESAFIO MVC - Projeto Palmirinha Onofre - Programa Start

Description

Repositório para entrega do Desafio MVC (semana 20/06 ~ 01/07/2022) - Projeto Palmirinha Onofre - Programa GFT Start
Objetivo: Aplicar os conceitos MVC aprendidos durante as semanas de estudo;
Escopo: Criar um sistema no qual simule um site de receitas;
Entrega básica:

  • CRUD de receitas: Listagem com pesquisa por nome, página de cadastro e atualização e busca por ingrediente,
  • CRUD de ingredientes: Listagem com pesquisa por nome e página de cadastro e atualização,
  • CRUD de unidades de medidas: Listagem com pesquisa por nome e página de cadastro e atualização,
  • Acessos de admin e usuário comum;

Desafios bônus (Exceeds):

  • Usar imagens nas receitas,
  • Conversor de unidades,
  • TDD/testes unitários,
  • Histórico de receitas de usuários,
  • Envio de email com confirmação de cadastro para o usuário,
  • Funcionalidades extras com front-end.

Awesome Tasty Recipes

O espetáculo do sabor

Para o desafio foi criado o sistema Awesome Tasty Recipes - O espetáculo do sabor para procurar trazer o projeto o mais para a realidade possível.
Nele foi aplicado o solicitado da entrega básica e exceeds com detalhes abaixo relacionado:

  • A página inicial do site contém a lista de receitas acessível por todos (não necessita autenticação);
  • A página de detalhes da receita também é acessível por todos (não necessita autenticação);
  • Para cadastrar ou editar receitas, deve possuir no mínimo a permissão de usuário comum, e com essa permissão é possível somente editar a(s) própria(s) receita(s);
  • Usuário com perfil administrador possui acesso total ao sistema e pode editar qualquer receita.
  • Adição de avaliação para receita, mostrando a média de notas no index e nos detalhes de receitas. Para avaliar deve ser usuário cadastrado com no mínimo permissão de usuário comum, não sendo permitido usuário avaliar a própria receita, se tentar avaliar novamente, irá substituir a nota anterior;
  • É possível enviar imagens para os cadastros de Ingredientes e Receitas, podendo ser por upload de imagens com até 512KB e extensões png, jpg e jpeg ou URL de imagem, também com extensão png, jpg ou jpeg, já disponível online na nuvem;
  • Página com Conversor de Unidades de Medidas (não necessita autenticação);
  • Página 'sobre' com resumo do site;
  • Em relação ao envio de email quando é cadastrada uma nova conta, o Google interrompeu a autenticação de contas somente por usuário e senha de vez a partir de 30/05/2022 (https://support.google.com/mail/?p=BadCredentials);
  • Para configurar conta de email, basta modificar as opções de spring.mail que estão no arquivo application.properties, e também alterar com email de remetente na variável from que está no médoto sendEmailConfirmacaoCadastroTo da classe com.gft.atr.services.EmailSenderService;
  • Na segurança, a IDE avisou que WebSecurityConfigurerAdapter está depreciado, para sanar a situação, deve-se utilizar org.springframework.security.web.SecurityFilterChain, será feito em próxima atualização;
  • Paginação para as listas de Unidades, Ingredientes e Receitas também poderão ser implementadas em próxima atualização.

Configuration

O projeto foi feito utilizando:

  • IDE Eclipse versão 2022-03 (4.23.0).
  • Iniciado com spring initializr, com as configurações e dependências:
    • Project: Maven Project
    • Language: Java
    • Spring Boot 2.7.0
    • Packaging: Jar
    • Java 17
    • Dependencies:
      • Spring Boot DevTools
      • Spring Web
      • Spring Data JPA
      • Validation
      • MySQL Driver
      • Thymeleaf
      • Spring Security
      • Java Mail Sender
  • Dependências adicionadas manualmente ao pom.xml:
    • thymeleaf-layout-dialect para utilizar layout junto com thymeleaf;
    • jacoco-maven-plugin para gerar relatório de coverage quando o teste é executado diretamente pelo terminal. É necessário também inserir plugin específico, verifique o pom.xml para checar o plugin jacoco-maven-plugin adicionado;
    • commons-codec para encode e decode de imagens em base64;
    • commons-io para manipular file to byte[] para teste;
    • thymeleaf-extras-springsecurity5 para poder utilizar recursos de segurança do spring security no thymeleaf.
  • Outros recursos:
  • Montagem do diagrama de classes UML utilizando o site Draw.io:
    Diagrama de Classes UML - Entidades Diagrama de Classes UML - Repositórios e Serviços

Visuals

Spring Banner personalizado:
Spring Banner - GFT - Awesome Tasty Recipes
Logotipo do projeto Awesome Tasty Recipes usando o site Canva:
Logotipo - Awesome Tasty Recipes
Página de erro personalizada (src/resources/templates/error.html):
Error Page
No formulário de usuário, o usuário admin não pode ser desativado:
Usuário admin não pode ser desativado
Em detalhes de usuário é mostrado as permissões e receitas vinculadas ao usuário detalhado:
Permissões e receitas vinculadas ao usuário
Em detalhes de usuário, quando não existe vínculo de permissão ou receita mostra avisos:
Quando não existe vínculo
Navbar pública:
Navbar pública
Navbar usuário:
Navbar usuário
Navbar administrador:
Navbar administrador
Filtro de receita público ou usuário:
Filtro de receita público ou usuário
Filtro de receita para administrador, pode pesquisar por usuário:
Filtro de receita para administrador Quando usuário é Usuário padrão, no index (home) habilita somente para editar própria receita:
Filtro de receita administrador
Quando usuário é Administrador, no index (home) habilita editar para todas receitas:
Filtro de receita administrador
Conversor de Unidades de Medidas convertendo unidades de tipos iguais:
Conversor de Unidades de Medidas convertendo unidades de tipos iguais
Conversor de Unidades de Medidas convertendo unidades de tipos iguais:
Conversor de Unidades de Medidas convertendo unidades de tipos diferentes
Resultado dos testes utilizando o comando ./mvnw clean test:
Resultado dos testes utilizando o comando mvnw clean test
Resultado do coverage pelo jacoco plugin:
Resultado do coverage pelo jacoco plugin

Installation

Para a abrir o projeto basta clonar o repositório ou realizar o download e após:

  • Importar o projeto, preferencialmente na IDE Eclipse;
  • Fazer atualizações das dependências do Maven (Alt+F5 no Eclipse);
  • Possuir no mínimo JDK 17 LTS instalado, sugestão de JDK: OpenJDK Zulu;
  • Possuir acesso à internet para atualização de dependências e funcionamento correto de URLs públicas;
  • Necessário possuir o banco de dados MySQL Server, caso não possua, pode visitar MySQL Community Download para download e instalação;
  • Duplicar e renomear o arquivo application.properties.sample, localizado em "src/main/resources/", para application.properties e alterar os parâmetros conforme segue:
    • URL de conexão com o banco, está para conexão local com MySQL: spring.datasource.url=jdbc:mysql://localhost:3306/atrdb?createDatabaseIfNotExist=True
    • Usuário root do banco: spring.datasource.username=dbrootuser - O usuário root com permissão ao MySQL Server local para criar bancos e tabelas;
    • Senha root do banco: spring.datasource.password=dbrootpass - Senha do usuário, alterar para a senha do root utilizado localmente;
    • Instrução para manutenção automática do banco: spring.jpa.hibernate.ddl-auto=update - Use create-drop para que ao iniciar a aplicação o spring JPA possa faça a criação necessária e faça a limpeza total do banco ao encerrar (sempre iniciando um banco de dados zerado); Use update para que o spring JPA apenas atualize as tabelas e atributos sem apagar os dados já existes;
    • Dados de servidor de email, alterar os parâmetros spring.mail.host, spring.mail.username, spring.mail.password para dados com .

Tests

Os testes foram feitos utilizando o JUnit 5, Mockito e MockMVC.
Para rodar os testes no terminal (PowerShell ou similiar) basta executar na pasta do projeto o comando abaixo:

./mvnw clean test

Após o teste finalizado, é possível verificar relatório de coverage em: target/site/jacoco/index.html

Usage

Para iniciar o projeto, basta utilizar uma das opções abaixo:

  • Utilizando a IDE Eclipse, basta executar (Run) a classe AwesomeTastyRecipesApplication no pacote com.gft.atr.

  • Utilizando o terminal (PowerShell ou similiar), basta executar na pasta do projeto o comando abaixo:

    ./mvnw clean package spring-boot:run

Quando o projeto subir, a aplicação estará acessível pelo endereço: http://localhost:8080
Ao acessar a aplicação pela primeira vez, sem possuir dados, será carregada tela para Instalação, que irá popular o banco de dados com 2 usuários padrões com perfis Administrador e Usuário e alguns cadastros de Unidades de Medida, Ingredientes e Receitas. Abaixo segue lista dos usuários disponíveis após fazer a instalação:

Nome de Usuário Senha Perfil
admin@email.com admin@1234 Administrador
usuario@email.com usuario@1234 Usuário

Support and Contributing

Dúvidas, problemas ou sugestões: abrir Issue ou Merge Request.

Authors and acknowledgment

Feito por Luis Carlos Zancanela

Project status

Done