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.
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 arquivoapplication.properties
, e também alterar com email de remetente na variávelfrom
que está no médotosendEmailConfirmacaoCadastroTo
da classecom.gft.atr.services.EmailSenderService
; - Na segurança, a IDE avisou que
WebSecurityConfigurerAdapter
está depreciado, para sanar a situação, deve-se utilizarorg.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.
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 opom.xml
para checar o pluginjacoco-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:
- Bootstrap 5.0.2;
- JQuery 3.6.0;
- Font Awesome 3.6.0;
- jQuery Raty para avaliar e mostrar notas das receitas.
- Montagem do diagrama de classes UML utilizando o site Draw.io:
Spring Banner personalizado:
Logotipo do projeto Awesome Tasty Recipes usando o site Canva:
Página de erro personalizada (src/resources/templates/error.html):
No formulário de usuário, o usuário admin não pode ser desativado:
Em detalhes de usuário é mostrado as permissões e receitas vinculadas ao usuário detalhado:
Em detalhes de usuário, quando não existe vínculo de permissão ou receita mostra avisos:
Navbar pública:
Navbar usuário:
Navbar administrador:
Filtro de receita público ou usuário:
Filtro de receita para administrador, pode pesquisar por usuário:
Quando usuário é Usuário padrão, no index (home) habilita somente para editar própria receita:
Quando usuário é Administrador, no index (home) habilita editar para todas receitas:
Conversor de Unidades de Medidas convertendo unidades de tipos iguais:
Conversor de Unidades de Medidas convertendo unidades de tipos iguais:
Resultado dos testes utilizando o comando ./mvnw clean test
:
Resultado do coverage pelo jacoco plugin:
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/", paraapplication.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
- Usecreate-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); Useupdate
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 .
- URL de conexão com o banco, está para conexão local com MySQL:
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
Para iniciar o projeto, basta utilizar uma das opções abaixo:
-
Utilizando a IDE Eclipse, basta executar (Run) a classe
AwesomeTastyRecipesApplication
no pacotecom.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 |
Dúvidas, problemas ou sugestões: abrir Issue ou Merge Request.
Feito por Luis Carlos Zancanela
Done