--- tags: Orc, sapatin-NodeJs, trilha --- # Desafios trilha de NodeJS (2022/1) ## Objetivos Este projeto se trata do desafio da trilha de NodeJs ,criada pelo Squad de capacitação da Empresa Junior Orc'estra Gamificação, que visa a pratica dos conceitos de NodeJs e Express. E neste documento se encontram detalhados os requisitos não-funcionais (restrições) e funcionais (que devem ser desenvolvidos). ## Requisitos não-funcionais (restrições) | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------------- | | RN01 | Este projeto deve ser desenvolvido no formato de uma API Rest. | | RN02 | Este projeto deve ser desenvolvido na linguagem Javascript/Typescript, com o uso da biblioteca Express. | | RN03 | Todos os Requisitos funcionais dentro da sessão "Obrigatório" devem ser desenvolvidos. | | RN04 | Toda e qualquer forma de autenticação deve ser feita atraves de JWT's ( JSON Web Tokens). | ## Desafio 1 ### Requisitos funcionais #### Lista de tarefas: | Código | Descrição | | :----: | :----------------------------------------------------------- | | RF01 | Um usuário deve ser capaz de criar uma lista de tarefas, com a rota `/list/` e o método **POST**. | | RF02 | Um usuário deve ser capaz de editar a descrição de suas listas de tarefas, com a rota `/list/` e o método **PATCH**. | | RF03 | Um usuário deve ser capaz de excluir uma lista de tarefas, com a rota `/list/` e o método **DELETE**. | | RF04 | Ao excluir uma lista de tarefas, todas as tarefas relacionadas a mesma devem ser excluídas. | | RF05 | Um usuário deve ser capaz de visualizar todas as suas listas cadastradas, com a rota `/list/all` e o método **GET**. | | RF06 | Um usuário deve ser capaz de visualizar uma unica lista cadastrada, com a rota `/list/:id` e o método **GET**.(devem ser visiveis todas as tarefas desta lista). | #### Tarefas: | Código | Descrição | | :----: | ------------------------------------------------------------ | | RF07 | Um usuário deve ser capaz de criar uma tarefa associada a uma lista de tarefas, com a rota `/task/` e o método **POST**| | RF08 | Um usuário deve ser capaz de editar tanto o status quanto a descrição de suas tarefa, com a rota `/task/` e o método **PATCH**. | | RF09 | Um usuário deve ser capaz de excluir uma tarefa , com a rota `/task/` e o método **DELETE**. | ## Desafio 2 | Código | Descrição | |:------:| ------------------------------------------------------------------------------------------------------ | | RF10 | Um usuário deve ser capaz de criar uma nova conta, com a rota `/user/` e o método **POST**. | | RF11 | Um usuário deve ser capaz de excluir sua conta, com a rota `/user/` e o método **DELETE**. | | RF12 | Ao excluir uma conta, todas as listas e tarefas associadas a mesma devem ser excluidas . | | RF013 | Cada lista criada deve conter uma referencia ao usuário ao qual ela pertence . | | RF14 | O usuário deve receber um JWT contendo seu Id, após enviar corretamente seu usuário e senha, na rota `/user/login/`. | | RF15 | O usuário só deve ser capaz de visualizar dados de sua própria conta (dados cadastrais/listas de tarefas/tarefas). | | RF16 | Caso o usuário tente acessar os dados de outro, ele deve receber uma mensagem de erro "Não autorizado" . | | RF17 | O usuário deve ser capaz de provar sua identidade informando um token de atenticação válido, recebendo o erro "Login expirado" se o mesmo extiver vencido e "Token invalido para outros erros". |