moleculer-db-adapter-prisma
SQL adapter for Moleculer DB service with Prisma.
Features
Install
$ npm install moleculer-db-adapter-prisma prisma --save
Usage
Define schema in project root
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DB_CONNECTION_URL")
}
model Post {
id String @id @default(uuid()) @db.VarChar(36)
title String @db.VarChar(255)
content String?
votes Int
status Boolean
createdAt DateTime @default(now())
}
Generate client
prisma generate
Do not forget sync DB structure: Schema prototyping
Write service
"use strict";
const { ServiceBroker } = require("moleculer");
const DbService = require("moleculer-db");
const PrismaAdapter = require("moleculer-db-adapter-prisma");
const broker = new ServiceBroker();
broker.createService({
name: "posts",
mixins: [DbService],
adapter: new PrismaAdapter(),
model: "post",
});
broker.start()
.then(() => broker.call("posts.create", {
title: "My first post",
votes: 0,
status: true,
}))
.then(() => broker.call("posts.find").then(console.log));
Raw queries
actions: {
findHello2() {
return this.adapter.db
.query("SELECT * FROM posts WHERE title = 'Hello 2' LIMIT 1")
.then(console.log);
}
}
Soft delete
- Add
deletedAt
field to model
model Post {
id String @id @default(uuid()) @db.VarChar(36)
title String @db.VarChar(255)
content String?
votes Int
status Boolean
createdAt DateTime @default(now())
deletedAt DateTime? @db.DateTime()
}
- Define adapter with
enableSoftDelete
flag:
broker.createService({
name: "posts",
mixins: [DbService],
adapter: new PrismaAdapter({ enableSoftDelete: true }),
model: "post",
});
- Next all 'deletion' methods will set
deletedAt = now()
. Get and find methods will filter by deletedAt IS NULL
Run example
- Up local DB instance in docker
docker run --name prisma_demo -e MYSQL_PASSWORD=password -e MYSQL_USER=user -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -e MYSQL_DATABASE=prisma -p 3306:3306 -d mysql:8.0.23 --default-authentication-plugin=mysql_native_password
- Sync DB structure and generate client
npm run prisma:push
npm run prisma:gen
- Run example script
npm run dev
Test
$ npm test
In development with watching
$ npm run ci
License
The project is available under the MIT license.
Contact
Copyright (c) 2016-2022 MoleculerJS