Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/henriqueotogami/todolistyoutube
To-Do List by Kamila Code. Esse projeto consiste em desenvolver uma aplicação em Java semelhante a uma To-Do List (lista de tarefas). Nela será possível cadastrar tarefas, listar tarefas, buscar tarefas pelo ID, além de editar e excluir tarefas (CRUD).
https://github.com/henriqueotogami/todolistyoutube
h2-database heroku-deployment intellij-idea java11 lombok maven postgresql postman-api spring-boot springdata-jpa springfox swagger
Last synced: about 1 month ago
JSON representation
To-Do List by Kamila Code. Esse projeto consiste em desenvolver uma aplicação em Java semelhante a uma To-Do List (lista de tarefas). Nela será possível cadastrar tarefas, listar tarefas, buscar tarefas pelo ID, além de editar e excluir tarefas (CRUD).
- Host: GitHub
- URL: https://github.com/henriqueotogami/todolistyoutube
- Owner: henriqueotogami
- License: mit
- Created: 2021-09-18T16:49:58.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-09-24T23:57:04.000Z (4 months ago)
- Last Synced: 2024-11-05T23:39:07.267Z (3 months ago)
- Topics: h2-database, heroku-deployment, intellij-idea, java11, lombok, maven, postgresql, postman-api, spring-boot, springdata-jpa, springfox, swagger
- Language: Java
- Homepage:
- Size: 52.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Projeto To Do List by [@Kamila Code](https://github.com/Kamilahsantos/)
#### Início: 07-09-2021 — 15-10-2021
#### [Repositório do projeto original](https://github.com/Kamilahsantos/serie-todo-list-youtube)
### Descrição
> Esse projeto consiste em desenvolver uma aplicação semelhante a uma To-Do List (lista de tarefas).
> Nela será possível cadastrar tarefas, listar tarefas, buscar tarefas pelo ID, além de editar e excluir tarefas (CRUD).> CRUD (Create, Read, Update, Delete) é um acrônimo para as maneiras de se operar em informação armazenada.
> É um mnemônico para as quatro operações básicas de armazenamento persistente.### Sumário
- [x] Vídeo-aula 01: [Introdução do projeto;](https://youtu.be/un7EgWqgNMs)
- [x] Vídeo-aula 02: [Inicialização do projeto com Spring Initializr e tabela H2 Database;](https://youtu.be/x0QtRR0Gp40)
- [x] Vídeo-aula 03: [Criando e listando as tarefas (POST e GET);](https://youtu.be/fR1O_U7Wd-c)
- [x] Vídeo-aula 04: [Editando/atualizando e excluindo as tarefas (PUT e DELETE);](https://youtu.be/jX6LAQQGunY)
- [x] Vídeo-aula 05: [Documentando a aplicação com o Swagger;](https://youtu.be/WMvaVwgrIFE)
- [x] Vídeo-aula 06: [Migrando o banco para o PostgreSQL e realizando Deploy no Heroku;](https://youtu.be/HIQtj5alGnE)
### Resumos
Resumo da vídeo-aula 01
> Apresentação do projeto através de uma visão panorâmica, mostrando as etapas e tecnologias utilizadas.
Resumo da vídeo-aula 02
> ### Aula 2
>
> Após executar a aplicação, o console será aberto, informando que o Spring está funcionando,
> qual porta está utilizando, e qual é a URL de acesso.> Console: Parte 1
> Console: Parte 2
> Console: Parte 3
> ### URL de acesso ao H2 Database
>
> Com a aplicação executando, após clicar no botão de `Run` na classe `TodolistyoutubeApplication`,
> copiar o endereço `URL` informado no console `jdbc:h2:mem:todolistyoutube`, conforme imagem do Console: Parte 2, mostrada acima.
>
> Abrir o endereço `http://localhost:8080/h2-console` no navegador, e inserir o endereço copiado (mencionado acima) no campo `JDBC URL`,
> conforme imagem abaixo.
Resumo da vídeo-aula 03
> ### Aula 3
>
> Neste projeto, será utilizado o `Postman` como plataforma de desenvolvimento de `API`, através da URL `http://localhost:8080/api/v1/tasks`.> ### Método POST
>
> Para criar a primeira tarefa, utilize o método `POST`.
>
> Após isso, selecione `Body` -> `raw` -> `JSON`, digite o código abaixo e clique no botão `SEND`:
>
> ### JSON:```json
{
"title": "Gravando o terceiro vídeo",
"description":"Vídeo sobre criação e listagem de tarefas.",
"deadLine": "2021-09-30"
}
```
> ### Método GET
>
> O valor retornado no console do `Postman`, através do método `GET`, é mostrado abaixo:
>
> ### JSON:
```json
{
"id": 1,
"title": "Gravando o terceiro vídeo",
"description": "Vídeo sobre criação e listagem de tarefas.",
"deadLine": "2021-09-30T00:00:00.000+00:00",
"createdAt": "2021-09-21T22:34:04.228+00:00",
"updatedAt": "2021-09-21T22:34:04.228+00:00"
}
```
> ### Simulação de erro
>
> Simulando erro, omitindo a informação de data no campo `deadLine`:
> ### Método GET
>
> Obtendo todas as tarefas criadas:> Obtendo tarefa por ID:
> ### H2 Database: Utilizando SQL
>
> Buscando todas as tarefas utilizando o `SELECT` na `H2 Database`:> Buscando somente as tarefas por `ID` utilizando o `SELECT` na `H2 Database`:
Resumo da vídeo-aula 04
> ### Aula 4
>
> Realizando a atualização (PUT) e exclusão (DELETE) de tarefas da nossa aplicação.
>
> Lembrando que é necessário incluir a tarefa no banco de dados a cada atualização do código.
>
> Isso é necessário porque o banco de dados atual não mantém o armazenamento das tarefas após ser desligado.
>
> ### TODO:
>
> **Isso será corrigido nas próximas aulas.**> ### Método DELETE
>
> Excluindo a tarefa do banco de dados.
>
> 1ª Etapa: Método POST - Inserindo a tarefa.
>
> ### JSON:```json
{
"id": 1,
"title": "Gravando o quarto vídeo (04 de 06)",
"description": "Vídeo sobre update e delete das tarefas.",
"deadLine": "2021-09-27T19:00:00.000+03:00"
}
```> 2ª Etapa: DELETE
>
> Para esse método, o comando é vazio e, consequentemente, o retorno também.
> ### Método PUT
>
> Atualizando o título, a descrição e a data máxima da tarefa no banco de dados.
>
> 1ª Estapa: POST - Inserindo a tarefa.
>
> ### JSON:```json
{
"id": 1,
"title": "Gravando o quarto vídeo",
"description": "Vídeo sobre editar/atualizar e excluir as tarefas.",
"deadLine": "2021-10-05T00:00:00.000+00:00"
}
```> 2ª Etapa PUT
>
> Atualizando a tarefa.
>
> ### JSON:```json
{
"id": 1,
"title": "Gravando o quarto vídeo (04 de 06)",
"description": "Vídeo sobre update e delete das tarefas.",
"deadLine": "2021-09-27T19:00:00.000+03:00"
}
```> ### Resultado
>
> Retorno do método PUT.
>
> ### JSON:```json
{
"id": 1,
"title": "Gravando o quarto vídeo (04 de 06)",
"description": "Vídeo sobre update e delete das tarefas.",
"deadLine": "2021-09-27T19:00:00.000+03:00",
"createdAt": "2021-09-28T21:38:44.329+00:00",
"updatedAt": "2021-09-28T21:45:01.896+00:00"
}
```> Veja que após a atualização da tarefa através do método PUT,
> as datas de criação e atualização possuem horários diferentes.
Resumo da vídeo-aula 05
> ### Refatorando o código
>
> Refatoração: Ao passar uma tarefa utilizando o método POST, é necessário informar o horário.
> A partir disso, o banco de dados armazena considerando o fuso horário local.> ### JSON
>
> Envio do método POST```JSON
{
"title": "Gravando o quinto vídeo (05 de 06)",
"description": "Vídeo sobre documentação e refatoração do código.",
"deadLine": "2021-10-05T19:00:00"
}```
> Tarefa armazenada no banco de dados
```JSON
{
"id": 1,
"title": "Gravando o quinto vídeo (05 de 06)",
"description": "Vídeo sobre documentação e refatoração do código.",
"deadLine": "2021-10-05T19:00:00",
"createdAt": "2021-10-05T19:21:20.731054",
"updatedAt": "2021-10-05T19:21:20.73111"
}```
> Informações no console
> 2021-10-05 19:21:20.686 INFO 967 --- [nio-8080-exec-4] c.k.t.controller.TaskController : Criando uma nova tarefa com as informações
> [Task(id=null, title=Gravando o quinto vídeo (05 de 06), description=Vídeo sobre documentação e refatoração do código., deadLine=2021-10-05T19:00, createdAt=null, updatedAt=null)]> Atualizando a tarefa no banco de dados
> Enviando pelo método PUT
```JSON
{
"title": "Atualização: Gravando o quinto vídeo (05 de 06)",
"description": "Vídeo sobre documentação e refatoração do código.",
"deadLine": "2021-10-05T19:00:00"
}```
> Atualização no Banco de dados
```JSON
{
"id": 1,
"title": "Atualização: Gravando o quinto vídeo (05 de 06)",
"description": "Vídeo sobre documentação e refatoração do código.",
"deadLine": "2021-10-05T19:00:00",
"createdAt": "2021-10-07T18:15:47.463402",
"updatedAt": "2021-10-07T18:18:34.990389"
}```
> ### Adicionando dependências
>
> Adicionando as dependências do `Springfox Swagger2` e `Springfox Swagger UI` no arquivo `pom.xml`:```XML
io.springfox
springfox-swagger-ui
2.9.2
io.springfox
springfox-swagger2
2.9.2
```
> ### Documentação
>
> Criar o diretório `docs` no endereço `src/main/java/com/kamilacode/todolistyoutube/`
>
> Criar a classe `SwaggerConfiguration.java` no diretório `docs`.
>
> Depois de implementar a classe `src/main/java/com/kamilacode/todolistyoutube/docs/SwaggerConfiguration.java`
>
> Executar a aplicação, e abrir a URL da Documentação no Swagger `http://localhost:8080/swagger-ui.html#/`> Gerenciador de Tarefas
>
> Task-Controller
>
> Adicionando mensagens para os erros retornados> Método: GET | Endereço: /api/v1/tasks | Listando todas as tarefas.
> Método: POST | Endereço: /api/v1/tasks | Criando uma nova tarefa.
> Método: GET | Endereço: /api/v1/tasks/{id} | Buscando uma tarefa pelo identificador único(ID).
> Método: PUT | Endereço: /api/v1/tasks/{id} | Atualizando uma nova tarefa existente.
> Método: DELETE | Endereço: /api/v1/tasks/{id} | Excluindo uma tarefa existente.
Resumo da vídeo-aula 06
> ### Aula 06
>
> #### Alternando do H2 Database para o PostgreSQL
>
> Adicionando a dependência no arquivo pom.xml
>
> todolistyoutube/pom.xml
>
> #### XML:```XML
org.postgresql
postgresql```
> Substituindo as configurações de banco de dados
>
> `src/main/resources/application.properties````PROPERTIES
spring.datasource.url=${JDBC_DATASOURCE_URL}
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
server.port=${PORT:8080}spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.maxActive=10
spring.datasource.maxIdle=5
spring.datasource.minIdle=2
spring.datasource.initialSize=5
spring.datasource.removeAbandoned=true```
> Criar o arquivo que informe ao Heroku que esse projeto utiliza a versão 11 do Java.
>
> `todolistyoutube/system.properties`
>
> #### PROPERTIES:```PROPERTIES
java.runtime.version=11
```
> ### Deploy no Heroku
>
> Para instalar o Heroku: [https://devcenter.heroku.com/articles/heroku-cli](https://devcenter.heroku.com/articles/heroku-cli])
>
> 1 - Esteja na branch master, para criar o app no Heroku. Comando no console: `$ heroku create`
>
> 2 - Após criar o app, renomeie. Comando no console: `$ heroku apps:rename todolist-kamilacode-hmap`
>
> 3 - Link com o nome do app renomeado: [https://todolist-kamilacode-hmap.herokuapp.com/](https://todolist-kamilacode-hmap.herokuapp.com/)
>
> 4 - Enviar a branch master para o Heroku: `$ git push heroku master`
> #### Falha no Deploy
>
> Por alguma razão, que eu não consegui descobrir ainda, mesmo seguindo as etapas do tutorial,
> todas as minhas tentivas de build no Heroku falharam.
> #### Solução da falha no Deploy
>
> [Artigo de solução no site ExceptionError](https://exerror.com/failed-to-execute-goal-org-apache-maven-pluginsmaven-resources-plugin3-2-0resources/)
>
> Em resumo, adicionei as configurações abaixo.
>
> 1 - Adicionada a versão 3.1.0 do Maven Resources em Plugins;
>
> ##### XML```XML
org.apache.maven.plugins
maven-resources-plugin
3.1.0
```
> 2 - Adicionada o Encoding UTF-8 em Properties.
>
> ##### XML```XML
UTF-8
```
> #### BUILD SUCCESS
>
> Após adicionar as configurações descritas acima, utilizei o comando `$ git push heroku master`
> Visualizando no terminal os logs: `$ heroku logs --tail`
> ### Conectando com o banco de dados PostgreSQL
>
> Utilizando o comando no terminal: `$ heroku addons:create heroku-postgresql`
> Visualizando as variáveis de configuração: `$ heroku config`
> Visualizando as informações do Heroku: `$ heroku pg`
### Tecnologias
- [x] [Maven](https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html);
- [x] [Java 11](https://www.oracle.com/br/java/technologies/javase/jdk11-archive-downloads.html);
- [x] [Spring Boot 2.5.4](https://spring.io/projects/spring-boot);
- [x] [H2 Database](https://www.h2database.com/html/main.html);
- [x] [Swagger](https://swagger.io) | [SpringFox](https://springfox.github.io/springfox/);
- [x] [Heroku](https://devcenter.heroku.com/categories/java-support);
- [x] [PostgreSQL](https://www.postgresql.org);
### Ferramentas
- [x] [Git Bash](https://git-scm.com/downloads);
- [x] [Postman Desktop](https://www.postman.com);
### IDE: IntelliJ IDEA Community Edition
#### Sistema: MacOS Big Sur - Versão 11.6
#### Plugins da IDE
- [Atom Material Icons](https://plugins.jetbrains.com/plugin/10044-atom-material-icons);
- [Codota AI Autocomplete for Java](https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript);
- [GitToolBox](https://plugins.jetbrains.com/plugin/7499-gittoolbox);
- [Material Theme UI](https://plugins.jetbrains.com/plugin/8006-material-theme-ui);
- [Nyan Progress Bar](https://plugins.jetbrains.com/plugin/8575-nyan-progress-bar);
- [One Dark Theme](https://plugins.jetbrains.com/plugin/11938-one-dark-theme);
- [Rainbow Brackets](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets);
- [Tabnine AI Code Completion](https://plugins.jetbrains.com/plugin/12798-tabnine-ai-code-completion-js-java-python-ts-rust-go-php--more);
### Dependências
> As dependências listadas abaixo são obtidas a partir do site [Spring Initializr](https://start.spring.io).
- [x] Spring Web:
> Crie aplicativos da web, incluindo RESTFul, usando Spring MVC.
> Usa Apache Tomcat como o contêiner integrado padrão.;
- [x] Spring Data JPA:
> Persistir dados em armazenamentos SQL com Java Persistence API usando Spring Data e Hibernate.;
- [x] H2 Database:
> Fornece um banco de dados na memória rápido que suporta acesso JDBC API e R2DBC, com uma pegada pequena (2 MB).
> Suporta modos integrados e de servidor, bem como um aplicativo de console baseado em navegador.;
- [x] Lombok:
> Biblioteca de anotação Java que ajuda a reduzir o código clichê.
### Créditos
- [x] [Foto de capa by Clay Banks | Unsplash - Photos for everyone;](https://unsplash.com/photos/oO6Gm16Cqcg)
- [x] [Shields.io | Badges Info from Github](https://img.shields.io)
- [x] [Alexandre Sanlim | Badges Tech](https://github.com/alexandresanlim/Badges4-README.md-Profile)
> ### Caso você queira ajudar a melhorar este repositório, qualquer ajuda é bem vinda.
- [x] Faça um **fork** deste repositório (https://github.com/henriqueotogami/todolistyoutube/fork);
- [x] Crie um **branch** com as suas modificações ` git checkout -b meu-novo-recurso `;
- [x] Faça um **commit** ` git commit -am 'Adicionando um novo recurso ...'`;
- [x] Faça um **push** ` git push origin meu-novo-recurso ` ;
- [x] Crie uma nova **pull request** neste repositório.**Depois que sua solicitação (pull request) for aceita e adicionada (merged) ao ramo principal (branch main), você pode excluir sua branch tranquilamente.**
> ### **Muito obrigado, e que a força esteja com você.**
>
> ### Desenvolvido por **HMAP | Henrique Matheus Alves Pereira** 🦁