Skip to content

Prisma guide #1365

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Sep 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/guides/examples/ffmpeg-video-processing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ export const ffmpegCompressVideo = task({
});
```

### Testing
### Testing your task

To test this task, use this payload structure:

Expand Down Expand Up @@ -241,7 +241,7 @@ export const ffmpegExtractAudio = task({
});
```

### Testing
### Testing your task

To test this task, use this payload structure:

Expand Down Expand Up @@ -351,7 +351,7 @@ export const ffmpegGenerateThumbnail = task({
});
```

## Testing your task
### Testing your task

To test this task in the dashboard, you can use the following payload:

Expand All @@ -361,4 +361,4 @@ To test this task in the dashboard, you can use the following payload:
}
```

<LocalDevelopment packages={"ffmpeg"} />
<LocalDevelopment packages={"ffmpeg"} />
2 changes: 1 addition & 1 deletion docs/guides/examples/supabase-database-operations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export const supabaseUpdateUserSubscription = task({
sure you have the correct permissions set up for your project.
</Note>

## Testing your task
### Testing your task

To test this task in the [Trigger.dev dashboard](https://cloud.trigger.dev), you can use the following payload:

Expand Down
182 changes: 182 additions & 0 deletions docs/guides/frameworks/prisma.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
---
title: "Prisma setup guide"
sidebarTitle: "Prisma"
description: "This guide will show you how to setup Prisma with Trigger.dev"
icon: "Triangle"
---

import Prerequisites from "/snippets/framework-prerequisites.mdx";
import CliInitStep from "/snippets/step-cli-init.mdx";
import CliDevStep from "/snippets/step-cli-dev.mdx";
import CliRunTestStep from "/snippets/step-run-test.mdx";
import CliViewRunStep from "/snippets/step-view-run.mdx";
import UsefulNextSteps from "/snippets/useful-next-steps.mdx";

## Overview

This guide will show you how to set up Prisma with Trigger.dev, test and view an example task run.

## Prerequisites

- An existing Node.js project with a `package.json` file
- Ensure TypeScript is installed
- A [PostgreSQL](https://www.postgresql.org/) database server running locally, or accessible via a connection string
- Prisma ORM [installed and initialized](https://www.prisma.io/docs/getting-started/quickstart) in your project
- A `DATABASE_URL` environment variable set in your `.env` file, pointing to your PostgreSQL database (e.g. `postgresql://user:password@localhost:5432/dbname`)

## Initial setup

<Steps>
<CliInitStep />
<CliDevStep />
<CliRunTestStep />
<CliViewRunStep />
</Steps>

## Creating a task using Prisma and deploying it to production

<Steps>
<Step title="Writing the Prisma task">

First, create a new task file in your `trigger` folder.

This is a simple task that will add a new user to the database.

<Note>
For this task to work correctly, you will need to have a `user` model in your Prisma schema with
an `id` field, a `name` field, and an `email` field.
</Note>

```ts /trigger/prisma-add-new-user.ts
import { PrismaClient } from "@prisma/client";
import { task } from "@trigger.dev/sdk/v3";

// Initialize Prisma client
const prisma = new PrismaClient();

export const addNewUser = task({
id: "prisma-add-new-user",
run: async (payload: { name: string; email: string; id: number }) => {
const { name, email, id } = payload;

// This will create a new user in the database
const user = await prisma.user.create({
data: {
name: name,
email: email,
id: id,
},
});

return {
message: `New user added successfully: ${user.id}`,
};
},
});
```

</Step>
<Step title="Configuring the build extension">

Next, configure the Prisma [build extension](https://trigger.dev/docs/config/extensions/overview) in the `trigger.config.js` file to include the Prisma client in the build.

This will ensure that the Prisma client is available when the task runs.

For a full list of options available in the Prisma build extension, see the [Prisma build extension documentation](https://trigger.dev/docs/config/config-file#prisma).

```js /trigger.config.js
export default defineConfig({
project: "<project ref>", // Your project reference
// Your other config settings...
build: {
extensions: [
prismaExtension({
version: "5.20.0", // optional, we'll automatically detect the version if not provided
// update this to the path of your Prisma schema file
schema: "prisma/schema.prisma",
}),
],
},
});
```

<Note>
[Build extensions](/config/config-file#extensions) allow you to hook into the build system and
customize the build process or the resulting bundle and container image (in the case of
deploying). You can use pre-built extensions or create your own.
</Note>

</Step>

<Step title="Optional: adding Prisma instrumentation">

We use OpenTelemetry to [instrument](https://trigger.dev/docs/config/config-file#instrumentations) our tasks and collect telemetry data.

If you want to automatically log all Prisma queries and mutations, you can use the Prisma instrumentation extension.

```js /trigger.config.js
import { defineConfig } from "@trigger.dev/sdk/v3";
import { PrismaInstrumentation } from "@prisma/instrumentation";
import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai";

export default defineConfig({
//..other stuff
instrumentations: [new PrismaInstrumentation(), new OpenAIInstrumentation()],
});
```

This provides much more detailed information about your tasks with minimal effort.

</Step>
<Step title="Deploying your task">
With the build extension and task configured, you can now deploy your task using the Trigger.dev CLI.

<CodeGroup>

```bash npm
npx trigger.dev@latest deploy
```

```bash pnpm
pnpm dlx trigger.dev@latest deploy
```

```bash yarn
yarn dlx trigger.dev@latest deploy
```

</CodeGroup>

</Step>

<Step title="Adding your DATABASE_URL environment variable to Trigger.dev">

In the sidebar select the "Environment Variables" page, then press the "New environment variable"
button. ![Environment variables page](/images/environment-variables-page.jpg)

You can add values for your local dev environment, staging and prod. in this case we will add the `DATABASE_URL` for the production environment.

![Environment variables
page](/images/environment-variables-panel.jpg)

</Step>
Comment on lines +152 to +162
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Minor formatting issue in the environment variables section.

The formatting of the image links is slightly off, causing them to appear on separate lines from their descriptions.

Consider adjusting the formatting as follows:

-In the sidebar select the "Environment Variables" page, then press the "New environment variable"
-button. ![Environment variables page](/images/environment-variables-page.jpg)
+In the sidebar select the "Environment Variables" page, then press the "New environment variable" button.
+
+![Environment variables page](/images/environment-variables-page.jpg)

 You can add values for your local dev environment, staging and prod. in this case we will add the `DATABASE_URL` for the production environment.

-![Environment variables
-  page](/images/environment-variables-panel.jpg)
+![Environment variables page](/images/environment-variables-panel.jpg)

This will improve the readability and layout of the guide.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Step title="Adding your DATABASE_URL environment variable to Trigger.dev">
In the sidebar select the "Environment Variables" page, then press the "New environment variable"
button. ![Environment variables page](/images/environment-variables-page.jpg)
You can add values for your local dev environment, staging and prod. in this case we will add the `DATABASE_URL` for the production environment.
![Environment variables
page](/images/environment-variables-panel.jpg)
</Step>
<Step title="Adding your DATABASE_URL environment variable to Trigger.dev">
In the sidebar select the "Environment Variables" page, then press the "New environment variable" button.
![Environment variables page](/images/environment-variables-page.jpg)
You can add values for your local dev environment, staging and prod. in this case we will add the `DATABASE_URL` for the production environment.
![Environment variables page](/images/environment-variables-panel.jpg)
</Step>
🧰 Tools
🪛 LanguageTool

[formatting] ~157-~157: Consider inserting a comma after an introductory phrase for better readability.
Context: ...ocal dev environment, staging and prod. in this case we will add the DATABASE_URL for the ...

(IN_THAT_CASE_COMMA)


<Step title="Running your task">

To test this task, go to the 'test' page in the Trigger.dev dashboard and run the task with the following payload:

```json
{
"name": "John Doe",
"email": "john@doe.test",
"id": 12345
}
```

Congratulations! You should now see a new completed run, and a new user with the credentials you provided should be added to your database.

</Step>

</Steps>

<UsefulNextSteps />
66 changes: 14 additions & 52 deletions docs/mint.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
{
"$schema": "https://mintlify.com/schema.json",
"name": "Trigger.dev",
"openapi": [
"/openapi.yml",
"/v3-openapi.yaml"
],
"openapi": ["/openapi.yml", "/v3-openapi.yaml"],
"api": {
"playground": {
"mode": "simple"
Expand Down Expand Up @@ -106,41 +103,26 @@
"navigation": [
{
"group": "Getting Started",
"pages": [
"introduction",
"quick-start",
"how-it-works",
"upgrading-beta",
"limits"
]
"pages": ["introduction", "quick-start", "how-it-works", "upgrading-beta", "limits"]
},
{
"group": "Fundamentals",
"pages": [
{
"group": "Tasks",
"pages": [
"tasks/overview",
"tasks/scheduled"
]
"pages": ["tasks/overview", "tasks/scheduled"]
},
"triggering",
"apikeys",
{
"group": "Configuration",
"pages": [
"config/config-file",
"config/extensions/overview"
]
"pages": ["config/config-file", "config/extensions/overview"]
}
]
},
{
"group": "Development",
"pages": [
"cli-dev",
"run-tests"
]
"pages": ["cli-dev", "run-tests"]
},
{
"group": "Deployment",
Expand All @@ -150,9 +132,7 @@
"github-actions",
{
"group": "Deployment integrations",
"pages": [
"vercel-integration"
]
"pages": ["vercel-integration"]
}
]
},
Expand All @@ -164,13 +144,7 @@
"errors-retrying",
{
"group": "Wait",
"pages": [
"wait",
"wait-for",
"wait-until",
"wait-for-event",
"wait-for-request"
]
"pages": ["wait", "wait-for", "wait-until", "wait-for-event", "wait-for-request"]
},
"queue-concurrency",
"versioning",
Expand All @@ -189,10 +163,7 @@
"management/overview",
{
"group": "Tasks API",
"pages": [
"management/tasks/trigger",
"management/tasks/batch-trigger"
]
"pages": ["management/tasks/trigger", "management/tasks/batch-trigger"]
},
{
"group": "Runs API",
Expand Down Expand Up @@ -231,9 +202,7 @@
},
{
"group": "Projects API",
"pages": [
"management/projects/runs"
]
"pages": ["management/projects/runs"]
}
]
},
Expand Down Expand Up @@ -279,11 +248,7 @@
},
{
"group": "Help",
"pages": [
"community",
"help-slack",
"help-email"
]
"pages": ["community", "help-slack", "help-email"]
},
{
"group": "Frameworks",
Expand All @@ -292,6 +257,7 @@
"guides/frameworks/bun",
"guides/frameworks/nextjs",
"guides/frameworks/nodejs",
"guides/frameworks/prisma",
"guides/frameworks/remix",
{
"group": "Supabase",
Expand Down Expand Up @@ -325,20 +291,16 @@
},
{
"group": "Dashboard",
"pages": [
"guides/dashboard/creating-a-project"
]
"pages": ["guides/dashboard/creating-a-project"]
},
{
"group": "Migrations",
"pages": [
"guides/use-cases/upgrading-from-v2"
]
"pages": ["guides/use-cases/upgrading-from-v2"]
}
],
"footerSocials": {
"twitter": "https://twitter.com/triggerdotdev",
"github": "https://github.com/triggerdotdev",
"linkedin": "https://www.linkedin.com/company/triggerdotdev"
}
}
}