To-do list API feita com Laravel 8 e PHP 8.0.
Sistema de autenticação com Laravel Sanctum para gerência de usuários, onde um token é fornecido ao criar usuário ou logar-se.
Este README divide as rotas e objetos de exemplo em usuarios e tasks, onde usuarios diz respeito aos modelos de rotas e objetos relacionadas ao sistema de usuários, e tasks está relacionado as operações que um usuário pode realizar sobre suas tasks quando está autenticado via token.
Resolvi implementar interface web na aplicação e para isso utilizei Inertia/Vue, juntamente com alguns componentes prontos do Laravel/Jetstream.
Para evitar um alto acoplamento de códigos, resolvi criar um novo controller para as operações da aplicação web (DashboardController).
Essa foi a minha primeira experiência com Vue.
Seguem alguns prints abaixo.
Content/Type: application/json
Accept: application/json
As rotas abaixo são para registrar um novo usuário e logar no sistema através de token.
- Cadastra um usuário e retorna um token de acesso
{
"name": "Matheus Martins", //required|string|max:255
"email": "email@exemplo.com", //required|string|e-mail|max:255
"password": "123123", //required|password|min:6
"password_confirmation": "123123" //required|password|confirmed|min:6
}
{
"data": {
"id": 1,
"nome": "Matheus Martins",
"email": "email@exemplo.com",
"created_at": "2021-11-04T00:02:16.000000Z",
"updated_at": "2021-11-04T00:02:16.000000Z",
"token": "1|XEiXoVvcEzbOBLxD4bR9X9jIGFAIG1AJQsjeRvkE" //Token para autenticação em seu cliente HTTP como Baerer Token
}
}
- Realiza login no sistema e retorna um token
{
"email": "email@exemplo.com", //required|string|e-mail|max:255
"password": "123123" //required|password|min:6
}
{
"data": {
"token": "2|MNr5EqF3Jn08dzPARGIm8fW0FUFcjrGuNkNioSxB"
}
}
- Desloga-se do sistema e exclui todos os tokens atribuídos ao usuário.
{
"mensagem": "Deslogado com sucesso"
}
As rotas abaixo são para cadastrar uma nova tarefa para o usuário logado.
- Lista uma lista paginada com 5 tarefas e outros links para as próximas páginas.
{
"data": [
{
"id": 1,
"text": "Tarefa de exemplo",
"status": "ativa",
"created_at": "2021-11-03T23:00:23.000000Z",
"updated_at": "2021-11-03T23:48:41.000000Z"
},
{
"id": 6,
"text": "Mais uma tarefa de exemplo",
"status": "ativa",
"created_at": "2021-11-03T23:26:03.000000Z",
"updated_at": "2021-11-03T23:26:03.000000Z"
},
{
"id": 7,
"text": "Outra tarefa",
"status": "cancelada",
"created_at": "2021-11-04T00:21:20.000000Z",
"updated_at": "2021-11-04T00:21:20.000000Z"
},
{
"id": 8,
"text": "Mais uma tarefa",
"status": "feita",
"created_at": "2021-11-04T00:21:31.000000Z",
"updated_at": "2021-11-04T00:21:31.000000Z"
}
],
"links": {
"first": "http://localhost:8000/api/tarefas?page=1",
"last": "http://localhost:8000/api/tarefas?page=4",
"prev": null,
"next": "http://localhost:8000/api/tarefas?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=1",
"label": "1",
"active": true
},
{
"url": "http://localhost:8000/api/tarefas?page=2",
"label": "2",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=3",
"label": "3",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=4",
"label": "4",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=2",
"label": "Next »",
"active": false
}
],
"path": "http://localhost:8000/api/tarefas",
"per_page": 5,
"to": 5,
"total": 18
}
}
- Lista todas as tarefas classificadas com 'status' = ativa|feita|cancelada
Exemplo onde status=ativa - lista todas as tarefas ativas do usuário logado.
{
"data": [
{
"id": 1,
"text": "Tarefa de exemplo",
"status": "ativa",
"created_at": "2021-11-03T23:00:23.000000Z",
"updated_at": "2021-11-03T23:48:41.000000Z"
},
{
"id": 6,
"text": "Mais uma Tarefa de exemplo",
"status": "ativa",
"created_at": "2021-11-03T23:26:03.000000Z",
"updated_at": "2021-11-03T23:26:03.000000Z"
}
],
"links": {
"first": "http://localhost:8000/api/tarefas?page=1",
"last": "http://localhost:8000/api/tarefas?page=3",
"prev": null,
"next": "http://localhost:8000/api/tarefas?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 3,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=1",
"label": "1",
"active": true
},
{
"url": "http://localhost:8000/api/tarefas?page=2",
"label": "2",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=3",
"label": "3",
"active": false
},
{
"url": "http://localhost:8000/api/tarefas?page=2",
"label": "Next »",
"active": false
}
],
"path": "http://localhost:8000/api/tarefas",
"per_page": 5,
"to": 5,
"total": 13
}
}
- Exibe uma tarefa pelo id, onde {id} é um valor inteiro
Exemplo onde id = 1 (/api/tarefas/1) - lista a tarefa de id 1 se esta pertencer ao usuário logado.
{
"data": [
{
"id": 1,
"text": "Tarefa de exemplo",
"status": "ativa",
"created_at": "2021-11-03T23:00:23.000000Z",
"updated_at": "2021-11-03T23:48:41.000000Z"
}
]
}
- Cria uma nova tarefa de acordo com os campos fornecidos no objeto JSON.
{
"text": "Mais uma tarefa", //required|string|max:255
"status": "ativa" //required|enum: ativa|feita|cancelada
}
{
"data": {
"id": 8,
"text": "Mais uma tarefa",
"status": "feita",
"created_at": "2021-11-04T00:21:31.000000Z",
"updated_at": "2021-11-04T00:21:31.000000Z"
}
}
- Edita a tarefa especificada por {id}.
Exemplo: /api/tarefas/1 - atualizando o 'text' da tarefa 1
{
"text": "Tarefa de exemplo ATUALIZADA"
}
{
"data": {
"id": 1,
"text": "Tarefa de exemplo ATUALIZADA",
"status": "ativa",
"created_at": "2021-11-03T23:00:23.000000Z",
"updated_at": "2021-11-04T00:25:12.000000Z"
}
}
- Deleta a tarefa especificada por {id}.
Exemplo: deletando a tarefa de id 8
{
"data": {
"id": 8,
"text": "Mais uma tarefa",
"status": "feita",
"created_at": "2021-11-04T00:21:31.000000Z",
"updated_at": "2021-11-04T00:27:32.000000Z"
}
}