SQL adapter for Moleculer DB service with Prisma.
$ npm install moleculer-db-adapter-prisma prisma --save
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())
}
prisma generate
Do not forget sync DB structure: Schema prototyping
"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", // Model name in camelCase
});
broker.start()
// Create a new post
.then(() => broker.call("posts.create", {
title: "My first post",
votes: 0,
status: true,
}))
// Get all posts
.then(() => broker.call("posts.find").then(console.log));
actions: {
findHello2() {
return this.adapter.db
.query("SELECT * FROM posts WHERE title = 'Hello 2' LIMIT 1")
.then(console.log);
}
}
- 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", // Model name in camelCase
});
- Next all 'deletion' methods will set
deletedAt = now()
. Get and find methods will filter bydeletedAt IS NULL
- 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
$ npm test
In development with watching
$ npm run ci
The project is available under the MIT license.
Copyright (c) 2016-2022 MoleculerJS