Posts now have denormalized creator username and name

This commit is contained in:
Pico2x 2022-10-12 16:42:28 +01:00
parent 84e2b63c49
commit 8ae1166c49
4 changed files with 16 additions and 10 deletions

View File

@ -8,6 +8,10 @@ export type Post = {
creatorId: string // User id
createdTime: number
slug: string
// denormalized user fields
creatorName: string
creatorUsername: string
}
export type DateDoc = Post & {

View File

@ -100,6 +100,8 @@ export const createpost = newEndpoint({}, async (req, auth) => {
createdTime: Date.now(),
content: content,
contractSlug,
creatorName: creator.name,
creatorUsername: creator.username,
})
await postRef.create(post)

View File

@ -3,7 +3,6 @@ import { DocumentIcon } from '@heroicons/react/solid'
import clsx from 'clsx'
import { Post } from 'common/post'
import Link from 'next/link'
import { useUserById } from 'web/hooks/use-user'
import { postPath } from 'web/lib/firebase/posts'
import { fromNow } from 'web/lib/util/time'
import { Avatar } from './avatar'
@ -17,13 +16,8 @@ export function PostCard(props: {
highlightOptions?: CardHighlightOptions
}) {
const { post, onPostClick, highlightOptions } = props
const creatorId = post.creatorId
const user = useUserById(creatorId)
const { itemIds: itemIds, highlightClassName } = highlightOptions || {}
if (!user) return <> </>
return (
<div className="relative py-1">
<Card
@ -33,14 +27,14 @@ export function PostCard(props: {
)}
>
<div className="flex-shrink-0">
<Avatar className="h-12 w-12" username={user?.username} />
<Avatar className="h-12 w-12" username={post.creatorUsername} />
</div>
<div className="">
<div className="text-sm text-gray-500">
<UserLink
className="text-neutral"
name={user?.name}
username={user?.username}
name={post.creatorName}
username={post.creatorUsername}
/>
<span className="mx-1"></span>
<span className="text-gray-500">{fromNow(post.createdTime)}</span>

View File

@ -52,7 +52,13 @@ export default function CreateDateDocPage() {
const newPost: Omit<
DateDoc,
'id' | 'creatorId' | 'createdTime' | 'slug' | 'contractSlug'
| 'id'
| 'creatorId'
| 'createdTime'
| 'slug'
| 'contractSlug'
| 'creatorUsername'
| 'creatorName'
> & { question?: string } = removeUndefinedProps({
title,
subtitle,