positiva-api-loader-plugin
v1.0.3
Published
Carrega os recursos de um aplicaçao da Positiva de forma semi-automatica
Downloads
3
Readme
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
- Motivação
- O que é um recurso
- Padrões
- Limitações atuais
- Dependências
- Como importar
- Parâmetros
- Como usar
- Autor
- 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
Tanque
e tem possui um campo produto. Esse produto possui várias características, por isso ele possui sua própria tabela chamadaProduto
. 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.
- Por exemplo, um sistema de monitoramento de nível, que possui uma tabela chamada
- 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
.
- 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
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 ([email protected])
Licença
AGPL-3.0