Este é o backend da aplicação Todo App - Um gerenciador de tarefas pessoal desenvolvido exclusivamente para o desafio da JackExperts! O objetivo dessa aplicação é conseguir criar uma API REST utilizando conceitos de CRUD, SOLID e Clean Code.
“Paciência você deve ter, meu jovem Padawan. - Mestre Yoda”
A API tem um total de 11 endpoints, sendo em volta principalmente do usuário - podendo cadastrar seu perfil, fazer login, relogar automaticamente, e administrar suas tarefas como desejar.
Para importar o JSON no Insomnia é só clicar no botão "Run in Insomnia". Depois é só seguir os passos que ele irá importar todos os endpoints, então seu insomnia deve ficar da seguinte forma:
Com o propósito de facilitar o deploy deste serviço no Railway, decidi criar esse repositório separado do repositório da aplicação TodoAPP.
A url base da API é https://todo-api-production-7540.up.railway.app
POST /users - FORMATO DA REQUISIÇÃO
{
"name": "John Doe",
"email": "johndoe@email.com",
"password": "12345678"
}
POST /users - FORMATO DA RESPOSTA - STATUS 201
{
"id": 1,
"name": "John Doe",
"email": "johndoe@email.com"
}
Caso o email já esteja cadastrado no banco de dados.
POST /users -
FORMATO DA RESPOSTA - STATUS 409
{
"message": "This email is already registered"
}
Quando o corpo não é compatível com o padrão.
POST /users -
FORMATO DA RESPOSTA - STATUS 400
{
"message": "Invalid email"
}
POST /users/login - FORMATO DA REQUISIÇÃO
{
"email": "johndoe@email.com",
"password": "12345678"
}
POST /users/login - FORMATO DA RESPOSTA - STATUS 200
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNzAxMjcwMjk2LCJleHAiOjE3MDEzMTM0OTZ9.Ebru139GF02sx9EFR0PouLrErYyYIcFJgLa6vIfsktA",
"user": {
"id": 1,
"name": "John Doe",
"email": "johndoe@email.com"
}
}
Caso o usuário não esteja cadastrado.
POST /users/login -
FORMATO DA RESPOSTA - STATUS 404
{
"message": "User does not exist"
}
Caso o email ou senha inseridos estejam incorretos.
POST /users/login -
FORMATO DA RESPOSTA - STATUS 401
{
"message": "Email and password doesn't match"
}
Quando o formato de requisição não é compatível com o padrão.
POST /users/login -
FORMATO DA RESPOSTA - STATUS 400
{
"message": "Invalid email"
}
Rotas que necessitam de autorização deve ser informado no cabeçalho da requisição o campo "Authorization", dessa forma:
Authorization: Bearer {token}
Após o usuário estar logado, ele deve conseguir gerenciar seu CRUD até que sua autorização expire.
GET /users/profile - FORMATO DA REQUISIÇÃO
Na requisição apenas é necessário o TOKEN, a aplicação ficará responsável em buscar o id do usuário no token e retorna ele.
GET /users/profile - FORMATO DA RESPOSTA - STATUS 200
{
"id": 1,
"name": "John Doe",
"email": "johndoe@email.com"
}
POST /tasks - FORMATO DA REQUISIÇÃO
{
"title": "Lorem ipsum",
"content": "Lorem ipsum",
"categoryId?": 1
}
POST /tasks - FORMATO DA RESPOSTA - STATUS 201
{
"id": 1,
"title": "Lorem ipsum",
"content": "Lorem ipsum",
"finished": false,
"categoryId": 1
}
Caso a categoria informada não exista.
POST /tasks - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Category not found"
}
Caso o token não seja informado.
POST /tasks - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
Quando o formato de requisição não é compatível com o padrão.
POST /tasks - FORMATO DA RESPOSTA - STATUS 400
{
"message": "String must contain at least 1 character(s)"
}
GET /tasks - FORMATO DA RESPOSTA - STATUS 200
[
{
"id": 1,
"title": "Lorem ipsum",
"content": "Lorem ipsum",
"finished": false,
"category": {
"id": 1,
"name": "Estudo"
}
}
]
GET /tasks - FORMATO DA RESPOSTA - STATUS 401
Caso o token não seja informado.
{
"message": "Token is required"
}
GET /tasks/:1 - FORMATO DA RESPOSTA - STATUS 200
{
"id": 1,
"title": "Lorem ipsum",
"content": "Lorem ipsum",
"finished": false,
"category": {
"id": 1,
"name": "Estudo"
}
}
Caso o id da tarefa não exista.
GET /tasks/:1 - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Task not found"
}
Caso o token não seja informado.
GET /tasks/:1 - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
PATCH /tasks/:1 - FORMATO DA REQUISIÇÃO
{
"title?": "Lorem ipsum",
"content?": "Lorem ipsum",
"finished?": true,
"categoryId?": 1
}
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 200
{
"id": 1,
"title": "Lorem ipsum",
"content": "Lorem ipsum",
"finished": true,
"categoryId": 1
}
Caso o id da tarefa não exista.
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Task not found"
}
Caso a categoria informada não exista.
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Category not found"
}
Caso o token não seja informado.
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
Caso a tarefa não pertença ao usuário.
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 403
{
"message": "This user is not the task owner"
}
Quando o formato de requisição não é compatível com o padrão.
PATCH /tasks/:1 - FORMATO DA RESPOSTA - STATUS 400
DELETE /tasks/:id - FORMATO DA RESPOSTA - STATUS 204
Esta rota não tem corpo no padrão de resposta.
Caso o id da tarefa não exista.
DELETE /tasks/:1 - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Task not found"
}
Caso o token não seja informado.
DELETE /tasks/:1 - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
Caso a tarefa não pertença ao usuário.
DELETE /tasks/:1 - FORMATO DA RESPOSTA - STATUS 403
{
"message": "This user is not the task owner"
}
POST /categories - FORMATO DA REQUISIÇÃO
{
"name": "Example"
}
POST /categories - FORMATO DA RESPOSTA - STATUS 201
{
"id": 1,
"name": "Example",
"userId": 1
}
Caso o token não seja informado.
POST /categories - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
Quando o formato de requisição não é compatível com o padrão.
POST /categories - FORMATO DA RESPOSTA - STATUS 400
DELETE /categories/:id - FORMATO DA RESPOSTA - STATUS 204
Esta rota não tem corpo no padrão de resposta.
Caso a categoria informada não exista.
DELETE /categories/:id - FORMATO DA RESPOSTA - STATUS 404
{
"message": "Category not found"
}
Caso o token não seja informado.
DELETE /categories/:id - FORMATO DA RESPOSTA - STATUS 401
{
"message": "Token is required"
}
Caso a categoria não pertença ao usuário.
DELETE /categories/:id - FORMATO DA RESPOSTA - STATUS 403
{
"message": "This user is not the category owner"
}
Feito com ♥ by Guscaleman 👋