Skip to content

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).

License

Notifications You must be signed in to change notification settings

henriqueotogami/todolistyoutube

Repository files navigation

Projeto To Do List by @Kamila Code

Início: 07-09-2021 — 15-10-2021



GitHub last commit


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


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:

{
    "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:

{
    "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:

{
    "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:

{
    "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:

{
    "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:

{
    "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

{
    "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

{
    "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

{
    "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

{
    "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:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

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:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

Substituindo as configurações de banco de dados

src/main/resources/application.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:

java.runtime.version=11

Deploy no Heroku

Para instalar o Heroku: 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/

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

Em resumo, adicionei as configurações abaixo.

1 - Adicionada a versão 3.1.0 do Maven Resources em Plugins;

XML
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
</plugin> 

2 - Adicionada o Encoding UTF-8 em Properties.

XML
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

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


Ferramentas


IDE: IntelliJ IDEA Community Edition

Sistema: MacOS Big Sur - Versão 11.6

Plugins da IDE


Dependências

As dependências listadas abaixo são obtidas a partir do site Spring Initializr.


  • Spring Web:

Crie aplicativos da web, incluindo RESTFul, usando Spring MVC. Usa Apache Tomcat como o contêiner integrado padrão.;

  • Spring Data JPA:

Persistir dados em armazenamentos SQL com Java Persistence API usando Spring Data e Hibernate.;

  • 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.;

  • Lombok:

Biblioteca de anotação Java que ajuda a reduzir o código clichê.


Créditos


Caso você queira ajudar a melhorar este repositório, qualquer ajuda é bem vinda.

  • Faça um fork deste repositório (https://github.com/henriqueotogami/todolistyoutube/fork);
  • Crie um branch com as suas modificações git checkout -b meu-novo-recurso;
  • Faça um commit git commit -am 'Adicionando um novo recurso ...';
  • Faça um push git push origin meu-novo-recurso ;
  • 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 🦁

About

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).

Topics

Resources

License

Stars

Watchers

Forks

Languages