API criada como projeto para o trabalho de conclusão de curso
- Sumário
- Sobre o projeto
- Começando
- Configurações
- Uso
- Rotas
- Super User
- Organizations
- Organizations Login
- Organizations Criar usuário
- Organizations Atualizar usuário
- Organizations Excluir uma usuário
- Organizations Listar usuários
- Organizations Informações de um usuário
- Organizations Perfil
- Organizations Atualizar perfil da organização
- Organizations Listar dados numéricos do dashboard
- Organizations Listar dados de acesso nos últimos dias
- Organizations Listar dados de acesso nos últimos meses
- Users
- Storage
- Erros e mesagens
- Licença
- Contato
A API foi criada com 4 camadas de usuários sendo eles: superuser, organizations, users e mqtt_user.
Copie o respositório seguindo os passos abaixos:
Atualize para a última versão do NPM.
- npm
npm install npm@latest -g
- Clone o repositório
git clone https://github.com/fernandonetom/api-iot-iluminacao-public.git
- Acesse o diretório do projeto e instale os pacotes NPM
cd api-iot-iluminacao-public && npm install
Crie um arquivo .env com o seu editor preferido, por exemplo:
vim .env
Dados de exemplo:
DB_HOST=localhost
DB_DATABASE_DEV=api_database_developer
DB_DATABASE=api_database_production
DB_USER=_api_database_user
DB_PASSWORD=api_api_database_password
DB_PORT=3355
SECRET_SUPERUSER=asasa
SECRET_ORGANIZATIONS=asasa
SECRET_USERS=asasa
[email protected]
ROOT_PASS="dsdsdss"
ROOT_NAME="Your Name"
DEV=true
CONFIGURAÇÃO | DESCRIÇÃO |
---|---|
DB_HOST | Servidor do banco PostreSQL |
DB_DATABASE_DEV | Base de dados de desenvolvimento |
DB_DATABASE | Base de dados de produção |
DB_USER | Usário do banco de dados |
DB_PASSWORD | Senha do banco de dados |
DB_PORT | Porta do banco de dados |
SECRET_SUPERUSER | Hash para a criação dos tokens do super usuário |
SECRET_ORGANIZATIONS | Hash para a criação dos tokens da organização |
SECRET_USERS | Hash para a criação dos tokens do usuário |
ROOT_EMAIL | Email do usuário root |
ROOT_PASS | Senha do usuário root |
ROOT_NAME | Nome do usuário root |
DEV | True: Ativa o modo de desenvolvimento (usa a base da dados de desenvolvimento) False: Desativa o modo de desenvolvimento (usa a base da dados de produção) |
Após ter configurado o arquivo .env, é necessário rodar a criação das tabelas no banco de dados, isso vai criar o usuário root automaticamente de acordo com as configurações feitas no arquivo .env.
knex migrate:latest
Finalmente execute a aplicação:
npm run dev
A {url} é http://localhost:3000, todas os corpo das requisições e respostas são no formato JSON.
GET | {url}/superuser/signin |
---|---|
Corpo da requisição | { "email": "[email protected]", "password": "dsdsdss" } |
Resposta | { "superUserId": 1, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" } |
POST | {url}/superuser/organizations |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Organization Example", "email": "[email protected]", "password": "pass", "superUserId": "1" } |
Resposta | { "organizationId": 1 } |
PUT | {url}/superuser/organizations/{organizationId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Empresa", "email": "[email protected]", "password": "123" //Se deixado em branco não vai alterar a senha } |
Resposta | { "message": "Atualizado com sucesso" } |
DELETE | {url}/superuser/organizations/{organizationId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | { "message": "Excluido com sucesso" } |
GET | {url}/superuser/organizations |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | [ { "id": 1, "name": "Empresa 1", "email": "[email protected]", "createdAt": "2020-09-01T12:36:57.926Z", "lastLogin": "2020-09-03T01:24:45.000Z", "superuser_id": 1 }, { "id": 2, "name": "Empresa 2", "email": "[email protected]", "createdAt": "2020-09-01T12:36:57.926Z", "lastLogin": "2020-09-03T01:24:45.000Z", "superuser_id": 1 } ] |
GET | {url}/organizations/signin |
---|---|
Corpo da requisição | { "email": "[email protected]", "password": "dsdsdss" } |
Resposta | { "organizationId": 1, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" } |
POST | {url}/users |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "User Example", "email": "[email protected]", "password": "pass", "organizationId": "1", "admin": "true" //deixe em branco para user comum} |
Resposta | { "userId": 1 } |
PUT | {url}/users/{userId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Empresa", "email": "[email protected]", "password": "123" //Se deixado em branco não vai alterar a senha , "admin": "true" //deixe em branco para user comum} |
Resposta | { "message": "Atualizado com sucesso" } |
DELETE | {url}/users/{userId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | { "message": "Excluido com sucesso" } |
GET | {url}/users |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | [ { "id": 1, "name": "Usuário 1", "email": "[email protected]","leve": "admin", "createdAt": "2020-09-01T12:36:57.926Z", "lastLogin": "2020-09-03T01:24:45.000Z", "organization_id": 1 }, { "id": 2, "name": "Empresa 2", "email": "[email protected]", "leve": "user", "createdAt": "2020-09-01T12:36:57.926Z", "lastLogin": "2020-09-03T01:24:45.000Z", "organization_id": 1 } ] |
GET | {url}/organizations/users/{userId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | {"name": "Org name", "email": "[email protected]", "createdAt": "2020-09-04T13:00:24.115Z", "userLevel": "user"} |
GET | {url}/organizations/profile |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | {"name": "Org name", "email": "[email protected]", "createdAt": "2020-09-04T13:00:24.115Z"} |
PUT | {url}/organizations/{orgId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Empresa", "email": "[email protected]", "password": "123" //Se deixado em branco não vai alterar a senha |
Resposta | { "message": "Atualizado com sucesso" } |
GET | {url}/organizations/stats/cron |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | { "adminUsers": 1, "users": 0, "devices": 1, "storages": 0} |
- Parâmetro
days
opcional, padrão é 7 caso não seja informado.
GET | {url}/organizations/stats/sessions/days/:days? |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Exemplo da resposta:
[
{
"data": "2020-10-06",
"valor": 0
},
{
"data": "2020-10-07",
"valor": 0
},
{
"data": "2020-10-08",
"valor": 0
},
{
"data": "2020-10-09",
"valor": 0
},
{
"data": "2020-10-10",
"valor": 0
},
{
"data": "2020-10-11",
"valor": 0
},
{
"data": "2020-10-12",
"valor": 0
},
{
"data": "2020-10-13",
"valor": 0
}
]
- Parâmetro
months
opcional, padrão é 7 caso não seja informado.
GET | {url}/organizations/stats/sessions/months/:months? |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Exemplo da resposta:
[
{
"mes": "03",
"mesNome": "MAR",
"ano": "2020",
"valor": 0
},
{
"mes": "04",
"mesNome": "ABR",
"ano": "2020",
"valor": 0
},
{
"mes": "05",
"mesNome": "MAI",
"ano": "2020",
"valor": 0
},
{
"mes": "06",
"mesNome": "JUN",
"ano": "2020",
"valor": 0
},
{
"mes": "07",
"mesNome": "JUL",
"ano": "2020",
"valor": 0
},
{
"mes": "08",
"mesNome": "AGO",
"ano": "2020",
"valor": 0
},
{
"mes": "09",
"mesNome": "SET",
"ano": "2020",
"valor": 4
},
{
"mes": "10",
"mesNome": "OUT",
"ano": "2020",
"valor": 1
}
]
GET | {url}/users/signin |
---|---|
Corpo da requisição | { "email": "[email protected]", "password": "dsdsdss" } |
Resposta | { "userId": 1, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" } |
POST | {url}/mqttusers |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Poste zona 2", "latitude": "-8.05428" //opcional, se em branco ficará nulo, "longitude": "-34.8813" //opcional, se em branco ficará nulo} |
Resposta | { "mqttUserID": 1, "name": "Poste zona 2", "username": "a5b6c7", "password": "d4c8v3", "latitude": -8.05428, "longitude": -34.8813, "user_id": 1, "organization_id": 1} |
PUT | {url}/mqttusers/{mqttusersId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "name": "Poste atualizado", "latitude": "-8.05428" //opcional, se em branco não será alterado, "longitude": "-34.8813" //opcional, //opcional, se em branco não será alterado} |
Resposta | { "message": "Atualizado com sucesso" } |
DELETE | {url}/mqttusers/{mqttusersId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | { "message": "Excluido com sucesso" } |
GET | {url}/mqttusers |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | [ { "id": 1, "name": "Poste 1", "latitude": -35.05, "longitude": -19.05641, "organization_id": 1, "user_id": 1, "createdAt": "2020-09-01T12:36:57.926Z"}, { "id": 2, "name": "Poste 2 atualizado", "latitude": null, "longitude": null, "organization_id": 1, "user_id": 1, "createdAt": "2020-09-01T12:36:57.926Z"} ] |
GET | {url}/mqttusers/list/{tipoDoDado} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "id": "2", //Id do dispositivo "rangeType": "data", //Range pode ser: hoje, data. periodo "data": "2020-09-02", //Obrigatório para range "data" "dataInicio": "2020-09-01", //Obrigatório para range "periodo" "dataFim": "2020-09-02" //Obrigatório para range "periodo" } |
Resposta | Consulte em Tipos de dados |
GET | {url}/users/profile |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | {"name": "User name", "email": "[email protected]", "userLevel": "admin", "createdAt": "2020-09-04T13:00:24.115Z", "orgName": "Org name"} |
GET | {url}/credentials/{mqttUserId} |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Resposta | { "id": 1, "name": "Poste 1", "username": "a5b6c7","password": "d4c8v3", "latitude": -35.05, "longitude": -19.05641, "organization_id": 1, "user_id": 1, "createdAt": "2020-09-01T12:36:57.926Z"} |
Responsável pela arquivação e listagem dos dados.
Como o objetivo da API foi para o sistema de iluminação pública inteligente, os seguintes dados podem ser coletados:
Tipo do dado | Descrição | Valor |
---|---|---|
alerta | Guarda os alertas enviados | 1 (cada alerta) |
movimentacao | Guarda as detecções de movimentação | 1 (cada movimentação) |
temperatura | Guarda os dados de temperatura coletado | decimal (Ex.: 25.6, 30.2) |
umidade | Guarda os dados de umidade coletado | decimal (Ex.: 90.5, 88.7) |
luminosidade | Guarda os dados de luminosidade coletado | decimal (Ex.: 90.5, 88.7) |
tensao | Guarda os dados de tensão da bateria do dispositivo | decimal (Ex.: 12.5, 13.7) |
Exemplo de requisição:
GET | {url}/storage/list/alerta |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "id": "2", "rangeType": "hoje" } |
Exemplo da resposta:
[
{
"hora": "0:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "1:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "2:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "3:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "4:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "5:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "6:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "7:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "8:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "9:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "10:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "11:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "12:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "13:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "14:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "15:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "16:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "17:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "18:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "19:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "20:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "21:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "22:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "23:00",
"valor": 0,
"data": "2020-09-23"
}
]
Exemplo de requisição:
GET | {url}/storage/list/alerta |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "id": "2", "rangeType": "data", "data": "2020-09-02" } |
Exemplo da resposta:
[
{
"hora": "0:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "1:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "2:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "3:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "4:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "5:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "6:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "7:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "8:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "9:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "10:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "11:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "12:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "13:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "14:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "15:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "16:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "17:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "18:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "19:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "20:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "21:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "22:00",
"valor": 0,
"data": "2020-09-23"
},
{
"hora": "23:00",
"valor": 0,
"data": "2020-09-23"
}
]
]
Os dados serão mostrados por dia, ou seja, se ele reunirá todos os dados em um dia (alertas e movimentações será feito em quantidade, o restante dos tipos de dados será efetuado uma média). Exemplos abaixo:
Exemplo de requisição:
GET | {url}/storage/list/alerta |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "id": "2", "rangeType": "periodo", "dataInicio": "2020-09-01", "dataFim": "2020-09-03" } |
Exemplo da resposta:
[
{
"data": "2020-09-01",
"valor": 10
},
{
"data": "2020-09-03",
"valor": 2
}
]
Perceba que o dia 03 não foi mostrado pois não há dados no dia.
Exemplo de requisição:
GET | {url}/storage/list/temperatura |
---|---|
Header da requisição | Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" |
Corpo da requisição | { "id": "2", "rangeType": "periodo", "dataInicio": "2020-09-01", "dataFim": "2020-09-03" } |
Exemplo da resposta:
[
{
"data": "2020-09-01",
"quantidade": "26.667"
},
{
"data": "2020-09-03",
"quantidade": "28.452"
}
]
Perceba que o dia 03 não foi mostrado pois não há dados no dia.
Código | Messagem | Descrição |
---|---|---|
200 | Criado com sucesso | Operação realizada |
200 | Excluido com sucesso | Dado excluido |
200 | Atualizado com sucesso | Dado atualizado com sucesso |
400 | ID não informado | O ID da organização, usuário, etc, não foi informado |
400 | Tipo não permitido | Tipo não permitido (consulte em tipos de dados |
400 | Formado dos dados está inválido | Formado dos dados está inválido (consulte em listagem de dados) |
400 | Data de inicio é maior que a do fim | Data de inicio é maior que a do fim ex.: início 2020-09-02 e fim 2020-09-01 |
400 | As datas de início e fim são iguais | As datas de início e fim devem ser diferentes para listar um período |
400 | Email em uso | Email utilizado por outro usuário |
400 | Email inválido | Deve ser no formado [email protected] |
400 | Campos obrigatório estão em branco | Campos obrigatório estão em branco |
401 | Token não informado | O token não foi informado na requisição |
401 | Token inválido | Token inválido ou já expirado |
401 | Você não tem permissão para executar essa ação | Você não é administrador ou não pode alterar por exemplo um usuário que não lhe pertence |
404 | Organização não encontrada | Organização não encontrada no banco de dados |
404 | Usuário não encontrado | Usuário não encontrado no banco de dados |
404 | Super usuário não encontrado | Super usuário não encontrado no banco de dados |
404 | Usuário mqtt não encontrado | Usuário mqtt não encontrado no banco de dados |
500 | Tente novamente mais tarde | Erro interno do servidor |
Licença MIT. Veja o arquivo LICENSE
para mais informações.
Fernando Neto - [email protected]