Esse projeto é uma API REST, onde podemos cadastrar usuários que podrá gerenciar tarefas caso esteja autenticado, as tarefas que o usuário poderá gerenciar serão:
- Cadastrar uma tarefa;
- Listar suas tarefas;
- Editar as informações de uma tarefa;
- Excluir uma tarefa;
sequenceDiagram
participant client
participant auth
participant /users
participant /tasks
participant repository
client->>/users: (POST) body: { username, name, password }
/users->>repository: { id, username, password, createdAt }
/users->>client: { status: 201, "Usuário criado com sucesso" }
client->>/tasks: (POST) body: { title, description, startAt, endAt, priority }, basicAuth: { username, password }
/tasks->>auth: basicAuth: { username, password }
auth->>/tasks: request: { ..., idUser }
/tasks->>repository: { id, idUser, title, description, startAt, endAt, priority, createdAt }
/tasks->>client: { status: 200, { id, idUser, title, description, startAt, endAt, priority, createdAt } }
client->>/tasks: (GET) url_param: { id }, basicAuth: { username, password }
/tasks->>auth: basicAuth: { username, password }
auth->>/tasks: request: { ..., idUser }
/tasks->>repository: { idUser }
repository->>/tasks: [..., { id, idUser, title, description, startAt, endAt, priority, createdAt }]
/tasks->>client: { status: 200, [..., { id, idUser, title, description, startAt, endAt, priority, createdAt }]}
client->>/tasks: (PUT) url_param: { id }, basicAuth: { username, password }, body: { title, description, startAt, endAt, priority }
/tasks->>auth: basicAuth: { username, password }
auth->>/tasks: request: { ..., idUser }
/tasks->>repository: { id }
repository->>/tasks: { id, idUser, title, description, startAt, endAt, priority, createdAt }
/tasks->>repository: { ...task, ...body }
/tasks->>client: { status: 200, { id, idUser, title, description, startAt, endAt, priority, createdAt } }
client->>/tasks: (DELETE) url_param: { id }, basicAuth: { username, password }
/tasks->>auth: basicAuth: { username, password }
auth->>/tasks: request: { ..., idUser }
/tasks->>repository: { id }
/tasks->>client: { status: 200, "Tarefa excluída com sucesso." }
flowchart TD
A[request to /tasks] --> B{Are username and password correct?};
B -- yes --> C[make request]
B -- no --> D[Status Code: 401 message: 'Unauthorized']
Para a realização desse projeto foi utilizado o framework Spring Boot assim foi possível cadastrar minhas rotas e utilizar o potencial dos notations removendo uma camada de complexidade com a automação do spring-boot. As notations poupa bastante tempo de escrita de código com uma biblioteca robusta como o spring-boot, e para deixar o desenvolvimento mais eficiênte, foi utilizado o lombok isso fez com que o desenvolvimento fosse feito em menos tempo e com uma qualidade de entrega melhor, pois deixou o código mais legível. Já para lidar com as persistencias no repository foi utilizado o starter-data-jpa, e o h2database para a persistencia dos dados, por ser um projeto para fins de aprendizados, simplifica boa parte do processo.
Para executar esse projeto será necessário ter o JDK17 e o maven instalado e configurado de acordo com seu sistema operacional.
Agora você deve executar o seguinte comando no seu terminal:
# instalação dos pacotes
$ mvn clean install
# Execução do servidor
$ mvn spring-boot:run
Agora você poderá testar com a utilização de uma ferramenta como por exemplo: insomnia ou postman