import { deleteDoc, doc, getDocs, query, updateDoc, where, } from 'firebase/firestore' import { Post } from 'common/post' import { coll, getValue, listenForValue } from './utils' export const posts = coll('posts') export function postPath(postSlug: string) { return `/post/${postSlug}` } export function updatePost(post: Post, updates: Partial) { return updateDoc(doc(posts, post.id), updates) } export function deletePost(post: Post) { return deleteDoc(doc(posts, post.id)) } export function getPost(postId: string) { return getValue(doc(posts, postId)) } export async function getPostBySlug(slug: string) { const q = query(posts, where('slug', '==', slug)) const docs = (await getDocs(q)).docs return docs.length === 0 ? null : docs[0].data() } export function listenForPost( postId: string, setPost: (post: Post | null) => void ) { return listenForValue(doc(posts, postId), setPost) } export async function listPosts(postIds?: string[]) { if (postIds === undefined) return [] return Promise.all(postIds.map(getPost)) }