type Project = InferSelectModel<typeof projects>;
export default class ProjectRepository extends Context.Tag("ProjectRepository")<
ProjectRepository,
{
findProject: (id: string) => Effect.Effect<Option.Option<Project>>;
}
>() {}
export const ProjectRepositoryLive = Layer.effect(
ProjectRepository,
Effect.gen(function* () {
const db = yield* Database;
return {
findProject(id) {
return Effect.gen(function* () {
const project = yield* Effect.promise(() =>
db.query.projects.findFirst({ where: eq(projects.id, id) })
);
return Option.fromNullable(project);
});
},
};
})
);
type Project = InferSelectModel<typeof projects>;
export default class ProjectRepository extends Context.Tag("ProjectRepository")<
ProjectRepository,
{
findProject: (id: string) => Effect.Effect<Option.Option<Project>>;
}
>() {}
export const ProjectRepositoryLive = Layer.effect(
ProjectRepository,
Effect.gen(function* () {
const db = yield* Database;
return {
findProject(id) {
return Effect.gen(function* () {
const project = yield* Effect.promise(() =>
db.query.projects.findFirst({ where: eq(projects.id, id) })
);
return Option.fromNullable(project);
});
},
};
})
);