-
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 nyc -
npm 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.
Biblioteca que disponibiliza um serviços CRUD para acessar e alterar dados no AWS DynamoDB através da interface Model do dynamoose.js.
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)
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)
{ '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' }
.
{ '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' }
.
{ 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'
.
{ 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'
.
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 criado -
status === 200
: Alteração ou exclusão do registro -
status === 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 sucesso -
status === 400
: Erro de validação e consistência nos dados. -
status === 500
: Erro de crítico e inesperado.