npm package: @indevweb/moleculer-db-adapter-sequelize
Description: SQL adapter (Postgres, MySQL, SQLite , MSSQL & CockroachDB) for Moleculer DB service
Author: Alexandre E Souza
Latest version: 0.0.4

![Moleculer logo](https://res.cloudinary.com/dqr3haveu/image/upload/v1637382763/cockroachdb-moleculer-banner_db02cp.png)

# moleculer-db-adapter-sequelize [![NPM version](https://img.shields.io/npm/v/@indevweb/moleculer-db-adapter-sequelize.svg)](https://www.npmjs.com/package/@indevweb/moleculer-db-adapter-sequelizee)

![](https://img.shields.io/github/issues/devalexandre/moleculer-db-adapter-sequelize)
![](https://img.shields.io/github/forks/devalexandre/moleculer-db-adapter-sequelize)
![](https://img.shields.io/github/stars/devalexandre/moleculer-db-adapter-sequelize)
![](https://img.shields.io/github/v/release/devalexandre/moleculer-db-adapter-sequelize.svg)

SQL adapter (Postgres, MySQL, SQLite, MSSQL & CockrachDB ) for Moleculer DB service with [sequelize-cockroachdb](https://github.com/cockroachdb/sequelize-cockroachdb).

# Features
- CockroachDb Support
- Sequelize 6 Support

# Install

```bash
$ npm install moleculer-db-adapter-sequelize sequelize-cockroachdb --save
```

You have to install additional packages for your database server:
```bash
# For SQLite
$ npm install sqlite3 --save

# For MySQL
$ npm install mysql2 --save

# For MariaDB
$ npm install mariadb --save

# For PostgreSQL
$ npm install pg pg-hstore --save

# For MSSQL
$ npm install tedious --save
```

## Usage

```js
"use strict";

const { ServiceBroker } = require("moleculer");
const DbService = require("moleculer-db");
const SqlAdapter = require("moleculer-db-adapter-sequelize");
const Sequelize = require("sequelize");

const broker = new ServiceBroker();

// Create a Sequelize service for `post` entities
broker.createService({
    name: "posts",
    mixins: [DbService],
    adapter: new SqlAdapter("sqlite://:memory:"),
    model: {
        name: "post",
        define: {
            title: Sequelize.STRING,
            content: Sequelize.TEXT,
            votes: Sequelize.INTEGER,
            author: Sequelize.INTEGER,
            status: Sequelize.BOOLEAN
        },
        options: {
            // Options from http://docs.sequelizejs.com/manual/tutorial/models-definition.html
        }
    },
});


broker.start()
// Create a new post
.then(() => broker.call("posts.create", {
    title: "My first post",
    content: "Lorem ipsum...",
    votes: 0
}))

// Get all posts
.then(() => broker.call("posts.find").then(console.log));
```

### Raw queries
You can reach the `sequelize` instance via `this.adapter.db`. To call [Raw queries](http://docs.sequelizejs.com/manual/raw-queries.html):

```js
    actions: {
        findHello2() {
            return this.adapter.db.query("SELECT * FROM posts WHERE title = 'Hello 2' LIMIT 1")
                .then(([res, metadata]) => res);
        }
    }
```

## Options
Every constructor arguments are passed to the `Sequelize` constructor. Read more about [Sequelize connection](http://docs.sequelizejs.com/manual/installation/getting-started.html).

**Example with connection URI**
```js
new SqlAdapter("postgres://user:pass@example.com:5432/dbname");
```

**Example with connection options**
```js
new SqlAdapter('database', 'username', 'password', {
    host: 'localhost',
    dialect: /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */,

    pool: {
        max: 5,
        min: 0,
        idle: 10000
    },

    // SQLite only
    storage: 'path/to/database.sqlite'
      dialectOptions: {
    // only cockroachdb      
    ssl: {
      rejectUnauthorized: false,
      // For secure connection:
      /*ca: fs.readFileSync('certs/ca.crt')
                .toString()*/
    },
  },
});
```

# Test
```
$ npm test
```

In development with watching

```
$ npm run ci
```

# License
The project is available under the [MIT license](https://tldrlegal.com/license/mit-license).