/todo-api

Primary LanguageTypeScript

TodoAPI

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”

Endpoints      

Endpoints

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.

Run in Insomnia

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:

TodoAPI


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

Rotas que não precisam de autenticação

Cadastro de usuário

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"
}

Possíveis erros

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"
}

Login

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"
	}
}

Possíveis erros

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

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.

Buscar Perfil do usuário logado (token)

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"
}

Criar tarefas para seu perfil

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
}

Possíveis erros

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)"
}

Listar tarefas criadas no seu perfil

GET /tasks - FORMATO DA RESPOSTA - STATUS 200

[
	{
		"id": 1,
		"title": "Lorem ipsum",
		"content": "Lorem ipsum",
		"finished": false,
		"category": {
			"id": 1,
			"name": "Estudo"
		}
	}
]

Possíveis erros

GET /tasks - FORMATO DA RESPOSTA - STATUS 401

Caso o token não seja informado.

{
	"message": "Token is required"
}

Listar tarefas individuais

GET /tasks/:1 - FORMATO DA RESPOSTA - STATUS 200

{
	"id": 1,
	"title": "Lorem ipsum",
	"content": "Lorem ipsum",
	"finished": false,
	"category": {
		"id": 1,
		"name": "Estudo"
	}
}

Possíveis erros

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"
}

Editar tarefas

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
}

Possíveis erros

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

Excluir tarefa

DELETE /tasks/:id - FORMATO DA RESPOSTA - STATUS 204

Esta rota não tem corpo no padrão de resposta.

Possíveis erros

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"
}

Criação de categorias

POST /categories - FORMATO DA REQUISIÇÃO

{
	"name": "Example"
}

POST /categories - FORMATO DA RESPOSTA - STATUS 201

{
	"id": 1,
	"name": "Example",
	"userId": 1
}

Possíveis erros

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

Excluir categoria

DELETE /categories/:id - FORMATO DA RESPOSTA - STATUS 204

Esta rota não tem corpo no padrão de resposta.

Possíveis erros

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 👋