here で説明されているように、HackerNews/Reddit と同様の「ホット順ソート」を実装しようとしています。
次のように投稿のランクを計算したい:
const age = new Date() - createdAt
const gravity = 1.8
const rankScore = (score - 1) / (age + 2) ** gravity
Post
モデルにはscore
値があります - 投稿が受け取った賛成票の数と、投稿が作成createdAt
された時間です。が高いほどrankScore
、投稿をリストの一番上に近づけたいと思います。したがって、score
とのcreatedAt
値を取得し、それらを使用して を計算rankScore
し、それorderBy
によって実行します。
Prismaでこれを実装する正しい方法は何ですか?
現在、私は次のように最も支持された投稿のリストを返しています。
prisma.post.findMany({
where: {
authorId: authorId,
published: args.published || undefined,
},
orderBy: [{ score: "desc" }],
})
したがって、モデルに既に存在するフィールドで投稿をランク付けするのは簡単ですが、投稿rankScore
の経過時間に依存するため、ページが読み込まれるときにリアルタイムで計算する必要があり、このようなものをデシベル。
これが私が書いている実際のリゾルバーコードです (posts
クエリを参照してください)。