import * as Schema from "@effect/schema/Schema";
import * as Sql from "@sqlfx/mysql";
import { Effect, pipe } from "effect";
import * as event from "../event.js";
import * as reducer from "../reducer.js";
export type Args = Schema.To<typeof event.Event>;
export const make = (args: Args) =>
pipe(
Sql.tag,
Effect.bindTo("sql"),
Effect.bind("event", () => Schema.encode(event.Event)(args)),
Effect.tap(
({ event, sql }) =>
sql`INSERT INTO my_events ${sql({
id: event.id,
aggregate_id: event.aggregateId,
account_id: event.accountId,
user_id: event.userId,
version: event.version,
created_at: event.createdAt,
data: event.data,
schema_version: event.schemaVersion,
type: event.type,
})}`
),
Effect.map(() => reducer.apply(null)(args))
);
import * as Schema from "@effect/schema/Schema";
import * as Sql from "@sqlfx/mysql";
import { Effect, pipe } from "effect";
import * as event from "../event.js";
import * as reducer from "../reducer.js";
export type Args = Schema.To<typeof event.Event>;
export const make = (args: Args) =>
pipe(
Sql.tag,
Effect.bindTo("sql"),
Effect.bind("event", () => Schema.encode(event.Event)(args)),
Effect.tap(
({ event, sql }) =>
sql`INSERT INTO my_events ${sql({
id: event.id,
aggregate_id: event.aggregateId,
account_id: event.accountId,
user_id: event.userId,
version: event.version,
created_at: event.createdAt,
data: event.data,
schema_version: event.schemaVersion,
type: event.type,
})}`
),
Effect.map(() => reducer.apply(null)(args))
);