export type Operation<R, E, A, B> = {
tag: Context.Tag<Operation<R, E, A, B>, Operation<R, E, A, B>>;
readonly execute: (input: A) => Effect.Effect<R, E, B>;
};
export const GetUserById = Context.Tag<
Operation<never, Error, string, User>
>("Operation/GetUserById");
export const GetUserByIdLive = Layer.effect(
GetUserById,
Effect.gen(function* (_) {
const userService = yield* _(UserService);
return GetUserById.of({
tag: GetUserById,
execute: (userId: string) => {
return userService.findById(userId);
},
});
})
);
export type Operation<R, E, A, B> = {
tag: Context.Tag<Operation<R, E, A, B>, Operation<R, E, A, B>>;
readonly execute: (input: A) => Effect.Effect<R, E, B>;
};
export const GetUserById = Context.Tag<
Operation<never, Error, string, User>
>("Operation/GetUserById");
export const GetUserByIdLive = Layer.effect(
GetUserById,
Effect.gen(function* (_) {
const userService = yield* _(UserService);
return GetUserById.of({
tag: GetUserById,
execute: (userId: string) => {
return userService.findById(userId);
},
});
})
);