database

Uma Ferramenta Sumor Cloud.
Documentação Adicional Um conector de banco de dados para MySQL, etc. Baseado em entidade.

CI Test Coverage Audit

Instalação

npm i @sumor/database --save

Pré-requisitos

Versão Node.JS

Requer versão Node.JS 16.x ou superior

Exige Módulo ES Node.JS

Como este pacote é escrito em módulo ES, por favor altere o seguinte código em seu arquivo package.json:

{
  "type": "module"
}

Uso

Uso Geral

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      }
    }
  },
  view: {}
})

// obter cliente com pool de conexão
const client = await database.client(config)

// obter conexão
const db = await client.connect()

// definir usuário operador
db.setUser('tester')

// criar registro
const car1Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X5'
})
const car2Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X6'
})

// ler registro
const car = await db.single('Car', { id: carId })
// car = {id: car1Id, brand: 'BMW', model: 'X5'}

// consultar registros
const cars = await db.query('Car', {
  brand: 'BMW'
})
// cars = [{id: car1Id, brand: 'BMW', model: 'X5'}, {id: car2Id, brand: 'BMW', model: 'X6'}]

// contar registros
const count = await db.count('Car', {
  brand: 'BMW'
})
// count = 2

// atualizar registro
await db.update(
  'Car',
  { id: car1Id },
  {
    brand: 'BMW',
    model: 'X5M'
  }
)

// garantir registro
await db.ensure('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// não irá inserir o registro se o brand 'BMW' já existir

// modificar registro
await db.modify('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// irá atualizar o modelo do registro se o brand 'BMW' já existir

// excluir registro
await db.delete('Car', { id: car1Id })

// fechar conexão
await db.commit()

// rollback
await db.rollback()

// fechar conexão
await db.release()

// destruir cliente quando o servidor deve ser desligado
await client.destroy()

Opções de Consulta

// consultar registros com opções
const cars = await db.select(
  'Car',
  {
    brand: 'BMW'
  },
  {
    term: 'X5',
    termRange: ['model'],
    top: 10,
    skip: 0
  }
)

Opções de Definição de Entidade

Índice

Você pode adicionar um array de índice na definição de entidade para criar um índice na tabela, por padrão, ele criará um índice no campo id.

Junção

Você pode adicionar um objeto de junção na definição de entidade para criar uma junção na tabela. como no exemplo abaixo, ele irá criar o campo userId na entidade Car.

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      },
      index: ['userId'],
      join: {
        user: 'User'
      }
    }
  },
  view: {}
})