Setting Up PrismaService and ManagedRuntime in Next.js with Prisma

Hellow!

I'm currently in the process of learning effect in a nextjs app using prisma. I'm trying to set up a PrismaService and a ManagedRuntime for my server env.

Is it a good way to handle it ?

// app/services/PrismaService.ts
import type { PrismaClient } from "@prisma/client";
import { Effect } from "effect";

export class PrismaService extends Effect.Service<PrismaService>()(
  "PrismaService",
  {
    effect: (client: PrismaClient) => {
      return Effect.succeed({
        use: <A>(cb: (client: PrismaClient) => Promise<A>) =>
          Effect.promise(() => cb(client)),
      });
    },
  },
) {}


// app/services/RuntimeServer.ts
import { PrismaClient } from "@prisma/client";
import { Layer, ManagedRuntime } from "effect";
import { PrismaService } from "@/services/PrismaService";

const prismaClient = new PrismaClient();

const mainLayer = Layer.mergeAll(PrismaService.Default(prismaClient));

export const RuntimeServer = ManagedRuntime.make(mainLayer);
Was this page helpful?