fvi-dynamoose-core
v0.0.2
Published
FVI - Dynamoose Core
Downloads
2
Maintainers
Readme
fvi-dynamoose-core
npm run compile
: Executa a limpeza dos arquivos e diretorios.npm run debug-test
: Executa os testes unitários com o DEBUG ativo.npm run test
: Executa os testes unitários.npm run debug-dev
: Executa os testes unitários e espera por alterações com o DEBUG ativo.npm run dev
: Executa os testes unitários e espera por alterçãoes.npm run prod
: Executa o código com NODE_ENV=production.npm run coverage
: Executa os testes unitários e retorna a cobertura dos códigos através do nycnpm run release
: Inicia uma nova release de versão incrementando opatch
, git flow release start.npm run release:minor
: Inicia uma nova release de versão incrementando ominor
, git flow release start.npm run release:major
: Inicia uma nova release de versão incrementando omajor
, git flow release start.npm run release:finish
: Finaliza a release, ou seja, realiza o git flow release finish.
FVI - Dynamoose Core
Biblioteca que disponibiliza um serviços CRUD para acessar e alterar dados no AWS DynamoDB através da interface Model do dynamoose.js.
Configuração
A configuração é na verdade o Model do dynamoose que já possui os métodos necessários para a implementação dos serviçoes auxiliares de CRUD. Podemos considerar a utilização da lib fvi-dynamoose-repository para mapear e retornar o Model do dynamoose para uma instância AWS DynamoDB.
- Exemplo utilizando a lib
fvi-dynamoose-repository
const app = require('fvi-dynamoose-core')
const repository = require('fvi-dynamoose-repository')
repo = repository()
repo = repo.map(
'model1',
{
id: hashKeyString(),
tenantId: rangeKeyString(),
prop1: requiredString(),
prop2: optionalString(),
},
{ saveUnknown: true },
{ update: true }
)
const model = repo.get('model1')
const services = app(model)
Mode de Usar
const app = require('fvi-dynamoose-core')
// Passing Dynamoose.Model Object
const services = app(model)
services.['hashWithRange'|'hashLikeId'|'hashLikeIdRangeLikeTenant']
.['create'|'update'|'query'|'queryByHashKey'|'queryById'|'delete']
(
{...params}
)
.then(console.log)
.catch(console.error)
Somente usando o hash key
{ 'any_hashkey-name': 'value' }
Neste serviço podemos ter um CRUD onde a tabela dynamodb sendo tratada terá em seu schema um HashKey configurado. Seguem métodos disponívels:
`services.hashOnly
.create(hash: Object, obj: Object)
: Cria um novo registro passando ohash
em um Object, e.g.{ id: 'value' }
e o Object completo com as propriedades..update(hash: Object, obj: Object)
: Atualiza um registro passando ohash
como um Object, e.g.{ id: 'value' }
, e o Object completo com todas as propriedades..queryByHashKey(hash: Object)
: Consulta um registro passando ohash
como um Object, e.g.{ id: 'value' }
..query(startHashKey: String, limit: Number)
: Consulta um ou mais registros paginados..delete(hash: Object)
: Excluir um registro, passando ohash
como uma Object, e.g.{ id: 'value' }
.
Tabela dynamo com hash key e range key
{ 'qualquer-hask-key-name': 'value', 'qualquer-range-key-name': 'value' }
Neste serviço podemos ter um CRUD onde a tabela dynamodb sendo tratada terá em seu schema um HashKey e um RangeKey configurados. Estão disponíveis os seguintes métodos:
services.hashWithRange
.create(hash: Object, range: Object, obj: Object)
: Cria um novo registro passando ohash
como um Object, e.g.{ id: 'value' }
, o range, e.g.{ status: 'value' }
e o Object completo com todas as propriedades..update(hash: Object, range: Object, obj: Object)
: Atualiza um registro passando ohash
como um Object, e.g.{ id: 'value' }
, o range, e.g.{ status: 'value' }
e o Object completo com todas as propriedades..queryByHashKey(hash: Object)
: Consulta um registro passando ohash
como um Object, e.g.{ id: 'value' }
..query(range: Object, startHashKey: Object, limit: Number)
: Consulta um ou mais registros paginados, passando orange
como um Object, e.g.{ status: 'value' }
..delete(hash: Object, range: Object)
: Excluir um registro, passando ohash
como um Object, e.g.{ id: 'value'}
erange
, e.g.{ status: 'value' }
.
Tabela dynamo com HashKey como 'id'
{ id: 'hashKey' }
Neste serviço podemos ter um CRUD onde a tabela dynamodb sendo tratada terá em seu schema um HashKey já configurado como a propriedade id
. Estão disponíveis os seguintes métodos:
services.hashLikeId
.create(obj: Object)
: Cria um novo registro passando um Object, e.g.{ id: 'value', prop1: 'value', etc: 'etc...' }
..update(id: String, obj: Object)
: Atualiza um registro passando oid
como uma String, e.g.'value'
, e o Object completo com todas as propriedades..queryById(id: String)
: Consulta um registro passando oid
como uma String, e.g.'value'
..query(startHashKey: String, limit: Number)
: Consulta um ou mais registros paginados..delete(id: String)
: Excluir um registro, passando oid
como uma String, e.g.'value'
.
Tabela dynamo com hash key como 'id' e range key como 'tenantId'
{ id: 'hashKey', tenantId: 'rangeKey' }
Neste serviço podemos ter um CRUD onde a tabela dynamodb sendo tratada terá em seu schema um HashKey já configurado como a propriedade id
e o . configurado para a propriedade tenantId
, ajudando a implementar o padrão arquitetural de software chamado multi-tenancy.
Neste serviço temos a necessidade de chamar ele passado o valor do tenantId
para que retorne os métodos do serviço, o CRUD. Este serviço vai gerenciar o tenantId
, ou seja, tem um comportamento diferente dos serviços anteriores, onde, não passamos informação alguma à ser gerenciada. Segu um exemplo:
const services = app(model)
const tenant1 = service.hashLikeIdRangeLikeTenant('tenant-1')
tenant1.update('id-value', { prop1: 'xxx' }) // then().catch()
const tenant2 = service.hashLikeIdRangeLikeTenant('tenant-1')
tenant2.create({ id: 'id-value', prop2: 'yyy' }) // then().catch()
services.hashLikeIdRangeLikeTenant('tenant-id')
.create(obj: Object)
: Cria um novo registro passando um Object, e.g.{ id: 'value', prop: 'xxx' }
..update(id: String, obj: Object)
: Atualiza um registro passando oid
como uma String, e.g.'value'
e o Object completo com todas as propriedades..queryById(id: String)
: Consulta um registro passando oid
como um String, e.g.'value'
..query(startKey: Object, limit: Number)
: Consulta um ou mais registros paginados..delete(id: String)
: Excluir um registro, passando oid
como um String, e.g.'value'
.
Padrões de retorno
Para funções de mutação de dados, que modificam de alguma maneira o DynamodDB retornam no formato abaixo:
{
"status": 200,
"data": {
"id": "value",
"status": "value"
}
}
status === 201
: Novo registro criadostatus === 200
: Alteração ou exclusão do registrostatus === 400
: Erro de validação e consistência nos dados.status === 500
: Erro de crítico e inesperado.
Para funções de consulta de dados, que não modificam o DynamodDB retornam no formato abaixo:
{
"status": 200,
"data": {
"LastKey": { "id": "prox-value" },
"Count": 1,
"Items": [
{
"id": "value",
"status": "value"
}
]
}
}
status === 200
: Consulta realizada com sucessostatus === 400
: Erro de validação e consistência nos dados.status === 500
: Erro de crítico e inesperado.