1

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クエリを参照してください)。

4

0 に答える 0