Nesse desafio, você deverá criar uma aplicação para treinar o que aprendeu até agora no Node.js!
Nesse desafio você irá trabalhar mais a fundo com middlewares no Express. Dessa forma você será capaz de fixar mais ainda os conhecimentos obtidos até agora.
O código utilizado será o mesmo do Desafio 01, com algumas implementações adicionais referentes aos middlewares.
Essa será uma aplicação para gerenciar tarefas (em inglês todos).
Será permitida a criação de um usuário com name e username, bem como fazer o CRUD de todos:
- Criar um novo
todo; - Listar todos os
todos; - Alterar o
titleedeadlinede umtodoexistente; - Marcar um
todocomo feito; - Excluir um
todo;
Tudo isso para cada usuário em específico. Além disso, dessa vez teremos um plano grátis onde o usuário só pode criar até dez todos e um plano Pro que irá permitir criar todos ilimitados, isso tudo usando middlewares para fazer as validações necessárias.
- Deve ser possível criar um novo
usuário; - Deve ser possível criar um novo
todo; - Deve ser possível listar os
todos; - Deve ser possível alterar o
titleedeadlinede umtodoexistente; - Deve ser possível marcar um
todocomo feito; - Deve ser possível deletar um
todo;
- Deve ser possível listar os
usuarioscadastrados;
- Não deve ser possível cadastrar um usuário com o mesmo
username; - Não deve ser possível cadastrar um
todopara um usuário inexistente; - Não deve ser possível listar os
todosde um usuário inexistente; - Não deve ser possível alterar o
titleedeadlinede umtodoinexistente; - Não deve ser possível marcar um
todoinexistente como feito; - Não deve ser possível deletar um
todoinexistente; - Não deve ser possível incluir mais de 10
todospara um usuário que não sejapro; - Não deve ser possível alterar um
todode um usuário que não seja o dono; - Não deve ser possível marcar um
todode um usuário que não seja o dono; - Não deve ser possível deletar um
todode um usuário que não seja o dono; - Não deve ser possível alterar um
todonão existente; - Não deve ser possível marcar um
todonão existente; - Não deve ser possível deletar um
todonão existente;
Detalhamento das rotas da API
Gerênciamento de usuários
Rota: /users
| Método | Rota | Descrição |
|---|---|---|
| POST | http://{apiBaseUrl}/users | Cria um novo usuário |
| PATCH | http://{apiBaseUrl}/users/:id/pro | Tornar uma conta de usuário Pró |
| GET | http://{apiBaseUrl}/users | Lista todos os usuários |
| GET | http://{apiBaseUrl}/users/:id | Lista um usuário pelo ID |
Json para criação de um novo usuário
{
"name": "Nome Completo do Usuário",
"username": "login de acesso"
}
Json retornado após a criação de um novo usuário
{
"id": "ad1a5496-361e-4462-9c67-180ce22e0807",
"name": "Nome Completo do Usuário",
"username": "login de acesso",
"todos": []
}
Gerênciamento de tarefas
Rota: /todos
| Método | Rota | Descrição |
|---|---|---|
| POST | http://{apiBaseUrl}/todos | Cria um novo todo |
| GET | http://{apiBaseUrl}/todos | Lista todos os todos |
| PUT | http://{apiBaseUrl}/todos/:id | Altera o title e o deadline de um todo |
| PATCH | http://{apiBaseUrl}/todos/:id/done | Altera o status de um todo para done |
| DELETE | http://{apiBaseUrl}/todos/:id | Deleta um todo |
Json para criação de uma nova tarefa "TODO"
{
"title": "Nome da tarefa"
}
Json retornado após a criação de uma nova tarefa "TODO"
{
"id": "fcfe9ff4-bc61-4127-a761-69edb64ff047",
"title": "Nome da tarefa",
"done": false,
"deadline": null,
"created_at": "2022-10-24T16:15:28.749Z"
}
# Baixar as dependências
npm install
# Executar o servidor
npm run dev
# Executar os testes
npm run test