https://github.com/didifive/desafio-mvc-java
Desafio MVC (semana 20/06 ~ 01/07/2022) - Projeto Palmirinha Onofre - Programa GFT Start
https://github.com/didifive/desafio-mvc-java
bootstrap commons-codec jacoco-plugin java javascript jquery maven mvc mysql spring-boot spring-data spring-mvc spring-security spring-web thymeleaf thymeleaf-layout thymeleaf-security5
Last synced: 2 months ago
JSON representation
Desafio MVC (semana 20/06 ~ 01/07/2022) - Projeto Palmirinha Onofre - Programa GFT Start
- Host: GitHub
- URL: https://github.com/didifive/desafio-mvc-java
- Owner: didifive
- Created: 2022-10-26T03:23:46.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-12-20T13:16:38.000Z (about 3 years ago)
- Last Synced: 2025-01-10T00:17:20.563Z (12 months ago)
- Topics: bootstrap, commons-codec, jacoco-plugin, java, javascript, jquery, maven, mvc, mysql, spring-boot, spring-data, spring-mvc, spring-security, spring-web, thymeleaf, thymeleaf-layout, thymeleaf-security5
- Language: Java
- Homepage:
- Size: 3.18 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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 ();
- 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:
- [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]:


## Visuals
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:

## 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:
```shell
./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:
```shell
./mvnw clean package spring-boot:run
```
Quando o projeto subir, a aplicação estará acessível pelo endereço:
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_
[Java 17]: https://docs.oracle.com/en/java/javase/17/docs/api/index.html
[JUnit 5]: https://junit.org/junit5/docs/current/user-guide/index.html
[IDE Eclipse]: https://www.eclipse.org/ide/
[spring initializr]: https://start.spring.io/
[Spring Boot]: https://spring.io/projects/spring-boot
[Maven]: https://maven.apache.org/
[MySQL Community Download]: https://dev.mysql.com/downloads/
[OpenJDK Zulu]: https://www.azul.com/downloads/
[Draw.io]: https://app.diagrams.net/
[Canva]: https://www.canva.com/pt_br/
[Luis Carlos Zancanela]: https://github.com/didifive
[Bootstrap]: https://getbootstrap.com/docs/5.0
[JQuery]: https://jquery.com/
[Font Awesome]: https://fontawesome.com/
[jQuery Raty]: https://www.wbotelhos.com/raty/