const GetBySlug = yield* SqlResolver.grouped("GetPublicationBySlug", {
Request: S.String,
RequestGroupKey: (_) => _,
Result: Publication,
ResultGroupKey: (_) => _.slug,
execute: (slugs) => sql`
SELECT id, owner_id, avatar, title, slug, description, socials, settings
FROM publications
WHERE slug IN ${sql.in(slugs)}
LIMIT 1
`,
});
const getPublicationBySlug = (slug: string) =>
pipe(
Effect.withRequestCaching(true)(GetBySlug.execute(slug)),
Effect.flatMap(Option.fromIterable),
Effect.catchTag("NoSuchElementException", () =>
Effect.fail(new NotFoundError({})),
),
Effect.catchTag("SqlError", (error) =>
Effect.fail(new DatabaseError({ error })),
),
Effect.withSpan("database.publication.getPublicationBySlug"),
);
const GetBySlug = yield* SqlResolver.grouped("GetPublicationBySlug", {
Request: S.String,
RequestGroupKey: (_) => _,
Result: Publication,
ResultGroupKey: (_) => _.slug,
execute: (slugs) => sql`
SELECT id, owner_id, avatar, title, slug, description, socials, settings
FROM publications
WHERE slug IN ${sql.in(slugs)}
LIMIT 1
`,
});
const getPublicationBySlug = (slug: string) =>
pipe(
Effect.withRequestCaching(true)(GetBySlug.execute(slug)),
Effect.flatMap(Option.fromIterable),
Effect.catchTag("NoSuchElementException", () =>
Effect.fail(new NotFoundError({})),
),
Effect.catchTag("SqlError", (error) =>
Effect.fail(new DatabaseError({ error })),
),
Effect.withSpan("database.publication.getPublicationBySlug"),
);