1import { Stage } from "alchemy";
2import * as Prisma from "alchemy/Prisma";
3import * as Config from "effect/Config";
4import * as Effect from "effect/Effect";
5
6export const region = "eu-west-3" as const;
7
8export const appNameConfig = Effect.gen(function* () {
9 const stage = yield* Stage;
10 return yield* Config.String("PRISMA_EFFECT_APP").pipe(
11 Effect.orElseSucceed(() => `alchemy-prisma-compute-effect-${stage}`),
12 );
13});
14
15export const Project = Prisma.Project(
16 "Project",
17 Effect.gen(function* () {
18 return {
19 name: yield* Config.String("PRISMA_PROJECT").pipe(
20 Effect.orElseSucceed(() => undefined),
21 ),
22 createDatabase: false,
23 region,
24 };
25 }),
26);
27
28export const Postgres = Prisma.Postgres(
29 "Postgres",
30 Effect.gen(function* () {
31 const project = yield* Project;
32 return {
33 project,
34 region,
35 // Project creation owns the default `main` branch. Select it by its
36 // Management API natural key instead of trying to create it again.
37 branchGitName: "main",
38 };
39 }),
40);
41
42export const Connection = Prisma.Connection(
43 "Connection",
44 Effect.gen(function* () {
45 const postgres = yield* Postgres;
46 return {
47 database: postgres,
48 name: "api",
49 };
50 }),
51);