1.0.3 • Published 5 years ago

positiva-api-loader-plugin v1.0.3

Weekly downloads
-
License
AGPL-3.0
Repository
-
Last release
5 years ago

positiva-api-loader-plugin

Carrega recursos de forma semi-automática. Esse plugin assume que alguns padrões estão sendo seguidos para funcionar.

Tabela de conteúdo

  1. Motivação
  2. O que é um recurso
  3. Padrões
  4. Limitações atuais
  5. Dependências
  6. Como importar
  7. Parâmetros
  8. Como usar
  9. Autor
  10. Licença

Motivação

A razão desse plugin existir é acelerar o desenvolvimento de aplicações da @Positiva, com a desvantagem de adicionar algumas restrições.

O que é um recurso

É uma tabela que possui os seguintes campos id, content, createdAt. O id é a chave primária da tabela, o createdAt é a timestamp em que o item foi inserido. O content é onde toda a informação útil de um item da tabela está.

Como exemplo de recurso, uma tabela chamada Produto. Essa tabela possui dois campos, o nome do produto e sua densidade. Um exemplo de item seria

{
    "id": "d8e331c4-7846-4031-bb23-9eca6be4e3b9",
    "content": {
      "name": "Água",
      "densidade": 997
    },
    "createAt": 1557404993
}

Tanto o id quanto o createdAt são gerados automaticamente na criação de um item.

Padrões

Ele funcionará com APIs e tabelas criados pela motherbox. Para mais informações consulte https://dev.positiva.app/docs/motherbox.

Limitações atuais

  • Só funciona com Vue;
  • Só funciona com a AWS;
  • Faz a comunicação através de uma API uma que usa o API Gateway como middleware para acessar e modificar dados do banco de dados;
  • Caso uma tabela dependa de outra, esse tratamento deverá ser feito na aplicação;
    • Por exemplo, um sistema de monitoramento de nível, que possui uma tabela chamada Tanquee tem possui um campo produto. Esse produto possui várias características, por isso ele possui sua própria tabela chamada Produto. Um item da tabela tanque terá um campo que contém uma referência para um item da tabela produto. Para acessar os detalhes daquele produto, terá que carregar os dados de ambas as tabelas e na aplicação descobrir essa informação.
  • Todos os dados da tabela são carregados, sempre que o positiva-api-loader é iniciado
    • Nesse sentido, o seu uso é so recomendado em tabelas que possuem e vão até centenas de items ou que são acessados de forma infrequente, o que em encaixa em alguns cenários de soluções oferecidas pela @Positiva.

Dependências

npm i aws-amplify

Como Importar

import PositivaAPILoader from 'positiva-api-loader-plugin';

Vue.use(PositivaAPILoader, {
  apiEndpointName: 'api',
  resourcesNames: ['locais', 'tanques', 'produtos']
});

Parâmetros

apiEndpointName

Nome do alias de um endpoint configurado no AWS Amplify em que a API está, como mostra o código abaixo.

import Amplify from 'aws-amplify';

Amplify.configure({
  API: {
    endpoints: [
      {
        name: 'api',
        endpoint: API_GATEWAY_URL,
        region: REGION
      }
    ]
  }
});

O parâmetro name acima é o valor de apiEndpointName. Para mais informações sobre como configurar o AWS Amplify e do porque consulte https://dev.positiva.app/docs/integracao-aws.

resourcesNames

Uma lista com os nomes dos recursos que serão carregados. Um recursos tem o mesmo nome que uma tabel, porém em lowercase.

Como Usar

Para iniciar o positiva-api-loader chame o seguinte método

// Carrega na aplicação todos os recursos
await this.$loader.init();

Após o método acima ter sido executado, para acessar dados de um recurso use a seguinte estrutura

this.$loader.<nome-do-recurso>.<atributo>

Atributos

add

/*
Adiciona um novo item na tabela

@body -> um objeto que possui um único campo chamado content, que possui os dados referente ao novo item
@return -> null
*/
async function add(body)

// por exemplo
await this.$loader.produtos.add({
    content: {
        name: 'Água',
        density: 977
    }
});

remove

/*
Remove um item da tabela

@id -> identificador do item a ser removido
@return -> null
*/
async function remove(id)

// por exemplo
await this.$loader.produtos.remove("d8e331c4-7846-4031-bb23-9eca6be4e3b9");

update

/*
Atualiza um item da tabela

@id -> identificador do item a ser atualizado
@content -> o novo contéudo que o item armazena. É importante passar todos os campos que deseja manter, mesmo que seu valor não foi atualizado
@return -> null
*/
async function update(id, content)

// por exemplo
await this.$loader.produtos.update("d8e331c4-7846-4031-bb23-9eca6be4e3b9", {
    name: "H20",
    density: "997"
});

data

Através desse atributos que é acessado os dados da tabela

console.log(this.$loader.produtos.data);

/*
[
    { name: "Água", density: 997 }, 
    { name: "Poliol 3030", density: 1012.5" },
    ...
]
*/

O plugin também oferece alguns métodos para acessar dados gerados por sensores, da seguinte forma

this.$measures.<atributo>

Atributos

/*
Acessa os dados produzidos por um sensor em um determinado intervalo de tempo.

@data -> nome do dado que um sensor está lendo. Por exemplo, temperatura
@id -> identificador do objeto que um sensor está lendo. Por exemplo, esse @objeto pode ser um Tanque
@begin -> timestamp do inicio do intervalo
@end -> timestamp do fim do intervalo
@return -> array com os dados
*/
async function getInterval(data, id, begin, end)

// por exemplo
const leituras = await this.$measures.getInterval(
    "nível", 
    "2675a4d2-0301-4320-ba04-990fc121a1e2",
    1557108803,
    1557408803
);

Autor

Renan Tashiro (renan.tashiro@positivatec.com)

Licença

AGPL-3.0

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago