import { getPayloadInstance } from './payload' import type { Post, Tag } from '@/payload-types' export async function listPosts(opts: { limit?: number; page?: number; tag?: string } = {}) { const payload = await getPayloadInstance() const where: Record = { _status: { equals: 'published' } } if (opts.tag) where['tags.slug'] = { equals: opts.tag } return payload.find({ collection: 'posts', where, sort: '-publishDate', limit: opts.limit ?? 8, page: opts.page ?? 1, depth: 1, }) } export async function getPostBySlug(slug: string): Promise { const payload = await getPayloadInstance() const r = await payload.find({ collection: 'posts', where: { slug: { equals: slug } }, limit: 1, depth: 2, }) return r.docs[0] } export async function listAllPostSlugs(): Promise { const payload = await getPayloadInstance() const r = await payload.find({ collection: 'posts', where: { _status: { equals: 'published' } }, limit: 0, pagination: false, }) return r.docs.map((d) => d.slug) } export async function listAllTags(): Promise<{ tag: Tag; count: number }[]> { const payload = await getPayloadInstance() const tags = await payload.find({ collection: 'tags', limit: 0, pagination: false }) const counts = await Promise.all( tags.docs.map(async (t) => { const r = await payload.count({ collection: 'posts', where: { 'tags.slug': { equals: t.slug }, _status: { equals: 'published' } }, }) return { tag: t, count: r.totalDocs } }), ) return counts.filter((c) => c.count > 0) }