export function transaction<E, A>(self: Effect.Effect<EntityManager, E, A>) {
const acquire = pipe(
EntityManagerTag,
Effect.flatMap((manager) =>
Effect.tryPromise(async () =>
manager.transaction(async (transactionalManager) =>
Effect.runPromise(pipe(self, Effect.provideService(EntityManagerTag, transactionalManager)))
)
)
)
);
return Effect.acquireUseRelease(
Scope.make(),
() => acquire,
(scope) => {
// TODO: check how to handle errors here
return Scope.close(scope, Exit.unit());
}
);
}
export function transaction<E, A>(self: Effect.Effect<EntityManager, E, A>) {
const acquire = pipe(
EntityManagerTag,
Effect.flatMap((manager) =>
Effect.tryPromise(async () =>
manager.transaction(async (transactionalManager) =>
Effect.runPromise(pipe(self, Effect.provideService(EntityManagerTag, transactionalManager)))
)
)
)
);
return Effect.acquireUseRelease(
Scope.make(),
() => acquire,
(scope) => {
// TODO: check how to handle errors here
return Scope.close(scope, Exit.unit());
}
);
}