import "dotenv/config";
import { drizzle } from "drizzle-orm/postgres-js";
import { migrate } from "drizzle-orm/postgres-js/migrator";
import { Config, Console, Effect } from "effect";
import { UnknownException } from "effect/Cause";
import { resolve } from "path";
import postgres from "postgres";
import * as schema from "../schema";
const migrator = Effect.gen(function* ($) {
const url = yield* $(Config.string("DATABASE_URL"));
const client = postgres(url, { max: 1 });
yield* $(
Effect.tryPromise({
try: () =>
migrate(drizzle(client, { schema }), {
migrationsFolder: resolve(__dirname, "../migrations"),
}),
catch: (err) => new UnknownException(err, "An error occured during migration."),
}),
Effect.tapErrorCause(Console.error),
Effect.match({
onFailure: () => client.end({ timeout: 5000 }),
onSuccess: () => client.end({ timeout: 5000 }),
}),
Effect.tap(() => Console.log("Migration successful. Disconnecting...")),
);
});
Effect.runPromise(migrator);
import "dotenv/config";
import { drizzle } from "drizzle-orm/postgres-js";
import { migrate } from "drizzle-orm/postgres-js/migrator";
import { Config, Console, Effect } from "effect";
import { UnknownException } from "effect/Cause";
import { resolve } from "path";
import postgres from "postgres";
import * as schema from "../schema";
const migrator = Effect.gen(function* ($) {
const url = yield* $(Config.string("DATABASE_URL"));
const client = postgres(url, { max: 1 });
yield* $(
Effect.tryPromise({
try: () =>
migrate(drizzle(client, { schema }), {
migrationsFolder: resolve(__dirname, "../migrations"),
}),
catch: (err) => new UnknownException(err, "An error occured during migration."),
}),
Effect.tapErrorCause(Console.error),
Effect.match({
onFailure: () => client.end({ timeout: 5000 }),
onSuccess: () => client.end({ timeout: 5000 }),
}),
Effect.tap(() => Console.log("Migration successful. Disconnecting...")),
);
});
Effect.runPromise(migrator);