import * as Operations from "@packages/database/operations";
import * as Database from "@packages/database/query";
import * as Schema from "@packages/database/schema";
import { Effect } from "effect";
export const DatabaseLive = Database.make({
url: process.env.DATABASE_URL as string,
});
// Use Effect.fn and pass the db as an argument, along side other
const getEntityCycleDate = Effect.fn(function* (
tx: Database.EffectPgTransaction,
entityId: string,
) {
return yield* qb
.select({
timezone: Schema.providers.timezone,
cycleDate: Operations.sql /*sql*/`(NOW() AT TIME ZONE ${Schema.providers.timezone})::date`,
})
.from(Schema.providers)
.where(Operations.eq(Schema.providers.id, entityId));
});
// Create our program and use our function
const program = Effect.gen(function* () {
const db = yield* Database.DatabaseService;
const result = yield* db.transaction((tx) =>
Effect.gen(function* () {
const lookupId = yield* Effect.succeed("mrw6g3xfxfm8zc7gtf7em918");
const cycleDate = yield* getEntityCycleDate(tx, lookupId);
return cycleDate;
}),
);
return result;
}).pipe(Effect.provide(DatabaseLive));
Effect.runPromise(program).then(console.log);
import * as Operations from "@packages/database/operations";
import * as Database from "@packages/database/query";
import * as Schema from "@packages/database/schema";
import { Effect } from "effect";
export const DatabaseLive = Database.make({
url: process.env.DATABASE_URL as string,
});
// Use Effect.fn and pass the db as an argument, along side other
const getEntityCycleDate = Effect.fn(function* (
tx: Database.EffectPgTransaction,
entityId: string,
) {
return yield* qb
.select({
timezone: Schema.providers.timezone,
cycleDate: Operations.sql /*sql*/`(NOW() AT TIME ZONE ${Schema.providers.timezone})::date`,
})
.from(Schema.providers)
.where(Operations.eq(Schema.providers.id, entityId));
});
// Create our program and use our function
const program = Effect.gen(function* () {
const db = yield* Database.DatabaseService;
const result = yield* db.transaction((tx) =>
Effect.gen(function* () {
const lookupId = yield* Effect.succeed("mrw6g3xfxfm8zc7gtf7em918");
const cycleDate = yield* getEntityCycleDate(tx, lookupId);
return cycleDate;
}),
);
return result;
}).pipe(Effect.provide(DatabaseLive));
Effect.runPromise(program).then(console.log);