0
2
import { defineQuery } from "$hatk";
import { hydrateStories, type StoryRow } from "../hydrate/stories.ts";
import { resolveHandle } from "../helpers/resolveHandle.ts";
const TWENTY_FOUR_HOURS = 24 * 60 * 60 * 1000;
export default defineQuery("social.grain.unspecced.getStories", async (ctx) => {
const { db, ok } = ctx;
const actor = ctx.params.actor ? await resolveHandle(db, ctx.params.actor) : null;
if (!actor) return ok({ stories: [] });
const cutoff = new Date(Date.now() - TWENTY_FOUR_HOURS).toISOString();
const rows = (await db.query(
`SELECT s.uri, s.cid, s.did, s.media, s.aspect_ratio, s.location, s.address, s.created_at
FROM "social.grain.story" s
LEFT JOIN _repos r ON s.did = r.did
WHERE s.did = $1 AND s.created_at > $2
AND (r.status IS NULL OR r.status NOT IN ('takendown', 'deactivated', 'deleted'))
ORDER BY s.created_at ASC`,
[actor, cutoff],
)) as StoryRow[];
const stories = await hydrateStories(ctx, actor, rows);
return ok({ stories });
});