import { ServiceImpl } from '@connectrpc/connect' import { Service } from '../../../proto/bsky_connect.js' import { Database } from '../db/index.js' import { getAncestorsAndSelfQb, getDescendentsQb } from '../util.js' export default (db: Database): Partial> => ({ async getThread(req) { const { postUri, above, below } = req const [ancestors, descendents] = await Promise.all([ getAncestorsAndSelfQb(db.db, { uri: postUri, parentHeight: above, }) .selectFrom('ancestor') .selectAll() .execute(), getDescendentsQb(db.db, { uri: postUri, depth: below, }) .selectFrom('descendent') .innerJoin('post', 'post.uri', 'descendent.uri') .orderBy('post.sortAt', 'desc') .selectAll() .execute(), ]) const uris = [ ...ancestors.map((p) => p.uri), ...descendents.map((p) => p.uri), ] return { uris } }, })