Skip to content
MacroMeta adapter for Moleculer DB service.
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
examples
src
test/unit
.codeclimate.yml
.eslintrc.js Initial commit Oct 17, 2019
.gitattributes
.gitignore Initial commit Oct 17, 2019
.npmignore
.travis.yml
LICENSE
README.md
index.js
package-lock.json
package.json

README.md

Moleculer logo

Build Status Coverage Status Known Vulnerabilities

moleculer-db-adapter-macrometa NPM version

MacroMeta adapter for Moleculer DB service.

Features

  • auto creating collection
  • raw C8QL queries
  • save & execute named queries
  • subscription to collection changes

Install

npm install moleculer-db-adapter-macrometa --save

Usage

"use strict";

const { ServiceBroker } = require("moleculer");
const DbService = require("moleculer-db");
const MacroMetaAdapter = require("moleculer-db-adapter-macrometa");

const broker = new ServiceBroker();

// Create a service for `post` Macrometa collection
broker.createService({
    name: "posts",
    mixins: [DbService],
    adapter: new MacroMetaAdapter({
        config: "https://gdn1.macrometa.io",

        auth: {
            email: "macrometa@moleculer.services",
            password: "secretpass"
        },

        tenant: null, // use default
        fabric: null // use default
    }),
    collection: "posts" // Name of collection
});


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

// posts.service.js
module.exports = {
    name: "posts",
    mixins: [DbService],
    adapter: new MacroMetaAdapter(),
    actions: {
        getMaxVotes() {
            return this.adapter.rawQuery(`
                FOR post IN posts
                FILTER post.status == true && post.votes > @minVotes
                SORT post.createdAt DESC
                LIMIT 3
                RETURN post._id
                `, { minVotes: 2 }, {});
        }
    }
}

More info about C8QL: https://dev.macrometa.io/docs/introduction-1

You have direct access for the this.collection & this.fabric instances inside the services.

Subscribe to changes

// posts.service.js
module.exports = {
    name: "posts",
    mixins: [DbService],
    adapter: new MacroMetaAdapter(),
    methods: {
        onChanges(payload) {
            this.logger.info("Collection has been changed", payload);
        }
    },
    async started() {
        await this.adapter.subscribeToChanges((err msg) => {
            if (err)
                return this.logger.error("Subscription error", err);

            this.onChanges(msg.payload);
        });
    },

    async stopped() {
        await this.adapter.unsubscribeFromChanges();
    }
}

Named queries

await this.adapter.saveQuery(name, query, parameters);
await this.adapter.executeSavedQuery(name,variables);

Test

$ npm test

In development with watching

$ npm run ci

Contribution

Please send pull requests improving the usage and fixing bugs, improving documentation and providing better examples, or providing some testing, because these things are important.

License

The project is available under the MIT license.

Contact

Copyright (c) 2019 MoleculerJS

@MoleculerJS @MoleculerJS

You can’t perform that action at this time.