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", { 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." })), ), }; }), }) {}