Visão geral do projeto, um pouco das tecnologias usadas.
A URL base da aplicação: https://pet-ctrl-up.herokuapp.com/
Diagrama ER da API definindo bem as relações entre as tabelas do banco de dados.
Clone o projeto em sua máquina e instale as dependências com o comando:
yarn
Em seguida, crie um arquivo .env, copiando o formato do arquivo .env.example:
cp .env.example .env
Configure suas variáveis de ambiente com suas credenciais do Postgres e uma nova database da sua escolha.
Execute as migrations com o comando:
yarn runMig
Nas rotas estão especificados os tipos tipos de autenticação necessárias. Para todas é necessário estar logado (no login, um token JWT será disponibilizado para o usuário), porém em outras rotas, também é necessário ter condição de Administrador.
O objeto Owners é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único do tutor. |
name | string | O nome do tutor. |
string | O e-mail do tutor. | |
address | string | Endereço do tutor |
phone_number | string | Telefone do tutor |
pets | string | relaçao de pets do tutor |
Método | Rota | Descrição |
---|---|---|
POST | /owners | Criação de um tutor. |
GET | /owners | Lista todos os tutores. |
PATCH | /owners/:id | Altera o dado de um tutor usando seu ID como parâmetro |
DELETE | /owners/:id | Deleta a conta de um tutor usando seu ID como parâmetro |
POST /owners
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"name": "Tutor1",
"email": "[email protected]",
"address": "Rua 1 numero 2",
"phone_number": "31999999999"
}
201 Created
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor1",
"email": "[email protected]",
"address": "Rua 1 numero 2",
"phone_number": "31999999999"
}
Código do Erro | Descrição |
---|---|
409 Conflict | Tutor ja cadastrado com esse email. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
GET /owners
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor1",
"email": "[email protected]",
"address": "Rua 1 numero 2",
"phone_number": "31999999999",
"pets": []
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
PATCH /owners/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"name": "Tutor2",
"email": "[email protected]",
"adress": "Rua 1 numero 22",
"phone_number": "31999999999"
}
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor2",
"email": "[email protected]",
"adress": "Rua 1 numero 22",
"phone_number": "31999999999",
"pets": []
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Tutor não encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
DELETE /owners/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
204 No content.
Código do Erro | Descrição |
---|---|
404 not found | Tutor não encontrado. |
404 not found | Token de autenticação inexistente. |
401 unauthorized | Token inválido. |
O objeto Pets é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único do pet. |
name | string | O nome do pet. |
breed | string | A raça do pet. |
type | string | A especie do animal. |
birthday | date | data de nascimento do pet. |
ownerId | string | Tutor responsavel pelo pet. |
reports | string | Laudos relacionados ao pet. |
service_list | string | Serviços prestados aos pets. |
Método | Rota | Descrição |
---|---|---|
POST | /pets | Criação de um usuario pet. |
GET | /pets | Lista todos os pets. |
PATCH | /pets/:id | Lista um pet especifico usando seu ID como parâmetro |
DELETE | /pets/:id | Deleta a conta de um pet usando seu ID como parâmetro |
POST /pets
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"name": "Pet 1",
"breed": "srd",
"type": "cachorro",
"birthday": "01/01/2010",
"ownerId": "9cda28c9-e540-4b2c-bf0c-c90006d37893"
}
201 Created
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Pet 1",
"breed": "srd",
"type": "cachorro",
"birthday": "2010-01-01T00:00:00.000Z",
"ownerId": "9cda28c9-e540-4b2c-bf0c-c90006d37893"
}
Código do Erro | Descrição |
---|---|
404 not found | Tutor não encontrado. |
404 not found | Token de autenticação inexistente. |
401 unauthorized | Token inválido. |
GET /owners
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor1",
"breed": "srd",
"type": "cachorro",
"birthday": "01/01/2010",
"ownerId": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"service_list": [],
"reports": []
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
GET /pets/9cda28c9-e540-4b2c-bf0c-c90006d37893
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Parâmetro | Tipo | Descrição |
---|---|---|
pet_id | string | Identificador único do pet (User) |
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor1",
"breed": "srd",
"type": "cachorro",
"birthday": "01/01/2010",
"ownerId": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"service_list": [],
"reports": []
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | User not found. |
PATCH /pets/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
200 OK
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tutor1",
"breed": "srd",
"type": "cachorro",
"birthday": "01/01/2010",
"ownerId": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"service_list": [],
"reports": []
}
Código do Erro | Descrição |
---|---|
404 Not Found | Id nao encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
DELETE /pets/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
204 No content
Código do Erro | Descrição |
---|---|
404 Not Found | Id nao encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
O objeto Reports é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único do laudo. |
reports | string | A descrição completa do laudo. |
pet_id | string | relaçao de pets com o laudo |
Método | Rota | Descrição |
---|---|---|
POST | /reports | Criação de um laudo. |
GET | /reports | Lista todos os laudos. |
PATCH | /reports/:id | Altera o dado de um laudo usando seu ID como parâmetro |
DELETE | /reports/:id | Deleta o laudo usando seu ID como parâmetro |
POST /reports
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
{
"reports": "Consulta de rotina",
"pet_id": "25"
}
201 Created
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"reports": "Consulta de rotina"
}
Código do Erro | Descrição |
---|---|
404 Not Found | Pet nao encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
GET /reports
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"reports": "Consulta de rotina",
"pet": {}
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
PATCH /reports/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
{
"reports": "Consulta de rotina, animal volta semana que vem pro retorno de vacina"
}
200 OK
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"reports": "Consulta de rotina, animal volta semana que vem pro retorno de vacina"
}
Código do Erro | Descrição |
---|---|
404 Not Found | Nenhum relatório com esse id. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
DELETE /reports/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
Vazio
204 no content
Código do Erro | Descrição |
---|---|
404 Not Found | Nenhum relatório com esse id. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
O objeto Services é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único do serviço. |
name | string | O nome do serviço prestado. |
price | number | Valor do serviço. |
category | string | Categoria de serviço. |
Método | Rota | Descrição |
---|---|---|
POST | /services | Criação de um serviço. |
GET | /services | Lista todos os serviços. |
PATCH | /services/:id | Altera o dado de um serviço usando seu ID como parâmetro |
DELETE | /services/:id | Deleta o serviço usando seu ID como parâmetro |
POST /services
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"name": "Banho",
"price": 25.0,
"category": "Estetica"
}
201 Created
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Banho",
"price": 25.0,
"category": "Estetica"
}
Código do Erro | Descrição |
---|---|
400 bad request | Serviço ja cadastrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
GET /services
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Banho",
"price": 25.0,
"category": "Estetica"
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
PATCH /services/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"name": "Tosa",
"price": 25.0,
"category": "Estetica"
}
200 OK
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Tosa",
"price": 25.0,
"category": "Estetica"
}
Código do Erro | Descrição |
---|---|
400 bad request | Serviço ja cadastrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
DELETE /services/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
204 No content
Código do Erro | Descrição |
---|---|
404 not found | Serviço nao existente. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
Método | Rota | Descrição |
---|---|---|
POST | /sessions | Login. |
O objeto Sessions é definido como:
Campo | Tipo | Descrição |
---|---|---|
name | string | Nome de usuario. |
password | string | Senha do usuario. |
POST /sessions
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: None
Content-type: application/json
{
"name": "Artur",
"password": "123456"
}
200 Ok
{
"user": {
"id": "a8bc48e2-1782-49ae-b7db-450ec18e1b71",
"name": "Artur",
"password": "$2a$08$F52af92YO3ja25XWB8Ap7e0EU7nTGdqRzP0MPy.2xg9Ihvx223H4K",
"isAdm": false
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTMzMTI5ODQsImV4cCI6MTY1MzM5OTM4NCwic3ViIjoiYThiYzQ4ZTItMTc4Mi00OWFlLWI3ZGItNDUwZWMxOGUxYjcxIn0.u1DhE-SBBHwO4CtFn_vCX7EEKHGITeVsi_6Np4yzmu0"
}
Código do Erro | Descrição |
---|---|
400 bad request | Usuario ou senha invalidos. |
O objeto Services é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único de usuario. |
name | string | O nome do usuario. |
password | string | Senha do usuario. |
isAdm | boolean | Verificacao de adm. |
Método | Rota | Descrição |
---|---|---|
POST | /services | Criação de um usuario. |
GET | /services | Lista todos os usuarios. |
PATCH | /services/:id | Altera o dado de um usuario usando seu ID como parâmetro |
DELETE | /services/:id | Deleta o usuario usando seu ID como parâmetro |
POST /users
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
{
"name": "Artur",
"password": "12345",
"isAdm": "false"
}
201 Created
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Artur",
"password": "12345",
"isAdm": "false"
}
Código do Erro | Descrição |
---|---|
409 conflict | Usuario ja existe. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
GET /users
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
Vazio
200 OK
[
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Artur",
"password": "12345",
"isAdm": "false"
}
]
Código do Erro | Descrição |
---|---|
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
PATCH /users/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
{
"name": "Artur",
"password": "1234",
"isAdm": "false"
}
200 OK
{
"id": "9cda28c9-e540-4b2c-bf0c-c90006d37893",
"name": "Artur",
"password": "1234",
"isAdm": "false"
}
Código do Erro | Descrição |
---|---|
404 not found | Usuario nao encontrado |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
DELETE /users/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token & Adm
Content-type: application/json
Vazio
204 No content
Código do Erro | Descrição |
---|---|
404 not found | Usuario nao encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
401 Unauthorized | Acesso negado (condição de Administrador necessária). |
O objeto Service_list é definido como:
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único do serviço. |
pet_id | string | O id do pet relacionado a lista. |
pet_services | string | Array de serviços. |
Método | Rota | Descrição |
---|---|---|
POST | /pets/servicelist | Criação de um serviço. |
DELETE | /pets/servicelist/:id | Deleta o serviço usando seu ID como parâmetro |
POST /pets/servicelist
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
{
"pet_id": "76fdb192-f4f7-4443-8285-34ec526a7f88",
"pet_services": [
"7604b882-c8c7-423f-bc53-b859c1ab9459",
"1341bd79-e2b3-4084-9908-6d4e60e70994"
]
}
201 Created
{
"pet": {
"id": "76fdb192-f4f7-4443-8285-34ec526a7f88",
"name": "Billy",
"breed": "SRD",
"type": "Cachorro",
"birthday": "2018-05-03T00:00:00.000Z",
"ownerId": "54973e17-ee4e-406a-9e73-49f9396008e3",
"service_list": [],
"reports": []
},
"id": "d7818706-cf7f-4d1a-ab60-19284480a204",
"service_date": "2022-05-23T13:42:15.820Z"
}
Código do Erro | Descrição |
---|---|
404 Not Found | Pet nao encontrado. |
404 Not Found | Lista de serviços nao encontrado. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
DELETE /services/:id
Host: https://pet-ctrl-up.herokuapp.com/
Authorization: Token
Content-type: application/json
Vazio
204 No content
Código do Erro | Descrição |
---|---|
404 not found | Lista nao existente. |
404 Not Found | Token de autenticação inexistente. |
401 Unauthorized | Token inválido. |
Todas as rotas foram testadas com testes de integração, porém na rota de service_list, um bug conhecido do SQLite3 impede que as tabelas se conectem, gerando um erro em cascata apenas naquela rota. Portanto, optamos por tirar o teste dessa rota em específico, mas nosso time de Quality Assurance testou as rotas manualmente via Insomnia, garantindo que está funcionando conforme o esperado.