Swagger: o projeto possui integração com o Swagger através da biblioteca
SpringDoc
, após clonar o projeto para acessar insira no seu navegador:
http://localhost:8080/swagger-ui/index.html#/
Postman: o projeto possui um arquivo JSON com todos os endpoints para postman nomeado "to-do-list-API.postman_collection.json" 😉
Esta aplicação é uma API Rest dedicada à gestão de tarefas. Ela oferece ao usuário a possibilidade de se organizar de maneira mais eficiente e aumentar sua produtividade. Uma de suas principais funcionalidades é a definição de prioridades para as tarefas por meio de tags de prioridade.
Além disso, a aplicação conta com um sistema de cadastro de usuários que utiliza autenticação JWT. Os endpoints são restritos com base no papel do usuário, seja ele um usuário comum ou administrador.
O projeto está em andamento e pode ser usado como base para o desenvolvimento de uma aplicação completa de lista de tarefas.
- Java 17
- Spring Boot 3.2.1:
Starter Web | Starter Validation | Starter Data JPA Starter Test | Starter Security
- Spring Security Test 6.2.1
- SpringDoc 2.3.0
- PostgreSQL 46.2.0
- JUnit 4.13.2
- JWT 4.4.0
- Criação
- Recuperação
- Atualizaçao
- Remoção
- Todas
- Por Titulo
- Pela data de Criação
- Alta
- Média
- Baixa
A API possui os seguintes endpoints:
Task
- Create a new product - POST /api/v1/tasks
- Retrieve all tasks - GET /api/v1/tasks
- Retrieve task by creation date - GET /api/v1/tasks/creation_date?q=2024-03-01
- Retrieve task by title - GET /api/v1/tasks/title?q=Uma%20task
- Updates a task - PUT /api/v1/tasks/{id}
- Delete a task - DELETE /api/v1/tasks/{id}
User
- Create an account - POST /api/v1/user/auth/register
- Log in to an account - POST /api/v1/user/auth/login
Admin
- Log in to an account - POST /api/v1/admin/auth/login
- Retrieve all users - GET /api/v1/admin/users
- Retrieve an user by id - GET /api/v1/admin/user/{id}
- Retrieve all admins - GET /api/v1/admin/admins
Root
- Log in to the Root account - POST /api/v1/root-admin/auth/login
- Create a Root user - POST /api/v1/root-admin/auth/register
- Create a admin account - POST /api/v1/root-admin/auth/admin-register
- Delete a admin account - DELETE /api/v1/root-admin/admin/{adminId}
BODY (INPUT) - CREATE / PUT
{
"title": "Uma Task",
"description": "Uma descrição",
"conclusionDate": "2024-01-31"
}
BODY (OUTPUT)
{
"id": "c2bb4cd2-2a75-4fcf-8f34-bbe96681534e",
"title": "Uma Task",
"description": "Uma descrição",
"creationDate": "2024-01-01",
"conclusionDate": "2024-01-31",
"lastUpdate": "2024-01-23"
},
-
Instale o PostgreSQL:
- Certifique-se de que o PostgreSQL está instalado na sua máquina.
-
Crie um Banco de Dados:
-
Abra o terminal ou o prompt de comando.
-
Acesse o psql, a interface de linha de comando do PostgreSQL.
-
Execute o comando abaixo para criar um banco de dados chamado
todolist_api
:createdb todolist_api
-
Alternativamente, você pode usar o psql diretamente para criar o banco de dados:
psql -U postgres -c "CREATE DATABASE todolist_api;"
-
Certifique-se de que o usuário PostgreSQL (por padrão,
postgres
) tem as permissões necessárias para criar bancos de dados.
-
-
Configurar as Variáveis de Ambiente:
-
Configure as variáveis de ambiente do seu sistema operacional. Você pode fazer isso adicionando as seguintes linhas ao arquivo de configuração de ambiente do seu sistema:
No Linux/MacOS:
export DB_NAME=todolist_api export POSTGRES_DB_USER=seu_usuario export POSTGRES_DB_PASSWORD=sua_senha
No Windows:
setx DB_NAME todolist_api setx POSTGRES_DB_USER=seu_usuario setx POSTGRES_DB_PASSWORD=sua_senha
-
-
Modificar o arquivo application.properties:
- Você também pode configurar o banco de dados no arquivo
application.properties
do Spring Boot. Abra o arquivosrc/main/resources/application.properties
e altere as seguintes linhas:
application.properties
spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD}
Altere o "${DB_USER}" e "${DB_PASSWORD}" pelo seu usuário e senha respectivamente.
- Você também pode configurar o banco de dados no arquivo
O user é o usuário comum, ele possui apenas permissões relacionadas a suas tarefas, sendo elas:
- Criar tarefas
- Consultar tarefas
- Atualizar tarefas
- Excluir tarefas
- Não existe limitação do número de contas com esse cargo.
O administrador possui como permissões:
- Acessar e excluir usuários comuns da aplicação (usuários que não possuem permissões administrativas)
- Consultar usuários comuns e usuários administradores
Importante: Guarde bem a senha e o login escolhidos para o Root pois não poderá ser recuperado através do sistema (o banco de dados guarda a senha encriptada).
O Root será único na aplicação e é o cargo com todas as permissões no sistema
A ideia é que o Root seja de acesso interno do sistema e seja de acesso restrito, apenas para pessoas de confiança
/api/v1/root-admin/auth/admin-register
Nele é necessário passar um JSON com a seguinte estrutura:
{
"login": "LoginDoRoot",
"password": "senhaDoRoot"
}
- A senha escolhida será encriptada assim como todo usuário, portanto a segurança da senha é feita pela aplicação, não se preocupe com a persistência da senha
apenas em guardar com segurança a senha e o login escolhido.
- O login do admin root também possui autenticação via JWT
O Root possui como permissões:
- Único a possuir permissão de criar e excluir usuários administradores.
- Todas as permissões dos cargos abaixo dele.
- Consultar tarefas de todos os usuários existentes na aplicação (ainda não implementado)