@tsdiapi/prisma seamlessly integrates Prisma with TSDIAPI-Server, providing hooks, events, and lifecycle management to enhance database operations.
- Prisma Client Integration: Automatically sets up and manages Prisma Client.
- Event System: Listen to events before and after Prisma operations.
- Hook Support: Dynamically modify queries using hooks.
- Lifecycle Management: Handles Prisma Client initialization and cleanup during app lifecycle.
- Configurable Options: Define query timeouts and load custom Prisma-related files via glob patterns.
npm install @tsdiapi/prisma
Or use the CLI to add the plugin:
tsdiapi add plugin prisma
Add the plugin to your TSDIAPI-Server setup:
import { createApp } from "@tsdiapi/server";
import prismaPlugin from "@tsdiapi/prisma";
createApp({
plugins: [
prismaPlugin({
prismaOptions: {
transactionOptions: { timeout: 15000 },
},
}),
],
});
The Prisma client is available via the client
export:
import { client } from "@tsdiapi/prisma";
const users = await client.user.findMany();
console.log(users);
Use decorators to respond to specific database events:
import { DbAfterListener, PrismaOperation } from "@tsdiapi/prisma";
import { Service } from "typedi";
@Service()
export class CustomEvents {
@DbAfterListener("User", PrismaOperation.Create)
public afterUserCreate(result: { args: any; result: any }) {
console.log(`User created with ID: ${result.result.id}`);
}
}
Available decorators:
-
DbBeforeListener(model, operation)
: Triggered before a Prisma query. -
DbAfterListener(model, operation)
: Triggered after a query is executed.
Modify queries dynamically using hooks:
import { Operation, PrismaOperation } from "@tsdiapi/prisma";
import { Service } from "typedi";
@Service()
export class QueryHooks {
@Operation(PrismaOperation.Create, "User")
public modifyUserCreate(args: { data: any }) {
args.data.name = `Modified-${args.data.name}`;
return args; // Return the modified query arguments
}
}
Option | Type | Default Value | Description |
---|---|---|---|
prismaOptions |
object |
{} |
Options for Prisma Client (e.g., timeouts). |
autoloadGlobPath |
string |
"*.prisma{.ts,.js}" |
Glob pattern for custom Prisma files. |
-
onInit
: Initializes the Prisma client and sets up hooks/events. -
Cleanup: Ensures the Prisma client disconnects on shutdown (
SIGINT
,SIGTERM
,exit
).
Create a simple setup to modify and log Prisma queries:
import { createApp } from "@tsdiapi/server";
import prismaPlugin from "@tsdiapi/prisma";
createApp({
plugins: [prismaPlugin()],
});
Define hooks and listeners to customize database interactions:
@Service()
export class UserEvents {
@Operation(PrismaOperation.Create, "User")
public logUserCreation(args: { data: any }) {
console.log("Creating user:", args.data);
}
@DbAfterListener("User", PrismaOperation.Create)
public afterUserCreated(result: { result: any }) {
console.log(`User created successfully: ${result.result.id}`);
}
}
The @tsdiapi/prisma plugin streamlines Prisma integration by providing hooks, events, and lifecycle management. With this plugin, you can easily customize and extend database operations in a clean and modular way.
For more details, refer to the documentation.