25 lines
894 B
TypeScript
25 lines
894 B
TypeScript
import { DiaryEntries } from "@/db/schemas";
|
|
import { singleResultOrFail } from "@/libs/utils/effects";
|
|
import { desc } from "drizzle-orm";
|
|
import { Data, Effect } from "effect";
|
|
|
|
import { LocalSqlite } from "./db";
|
|
|
|
class ReadApiError extends Data.TaggedError("ReadApiError")<{ cause: unknown }> {}
|
|
|
|
export class ReadApi extends Effect.Service<ReadApi>()("ReadApi", {
|
|
dependencies: [LocalSqlite.Default],
|
|
effect: Effect.gen(function*() {
|
|
const { query } = yield* LocalSqlite;
|
|
|
|
yield* Effect.logDebug("--- READ-API ---");
|
|
|
|
return {
|
|
getAllEntries: () => query(_ => _.select().from(DiaryEntries)),
|
|
getLastAddedEntry: () =>
|
|
query(_ => _.select().from(DiaryEntries).limit(1).orderBy(desc(DiaryEntries.dateCreated))).pipe(
|
|
singleResultOrFail(() => new ReadApiError({ cause: "Aucune entrée n'a encore été ajoutée." })),
|
|
),
|
|
};
|
|
}),
|
|
}) {}
|