APで循環参照するノート飛んできたらどうしたらいいのか問題

フォロー

@usbharu 再帰的に参照する回数がn回を超えたら無視するとか……。

@usbharu ツリーリプライだとnが大きくなりそうだし微妙かな?

パッと思いつくのはこれなんですが色々な方法で循環参照してしまうので難しいです。

例えば 投稿 → メンション → メンション先固定ノート → 最初の投稿 とかで循環参照してしまうとカウントするのが困難になります。

でもこの例だと途中でDBなどに保存したら重複を発見できるので例として適切じゃなかったですね…。

@usbharu
よくわかんないけど普通に再帰じゃだめなの?

digReferedPost(post, alreadyReferedPosts) {
if (alreadyReferedPosts.includes(post)) {
throw Exception('循環参照')
}
referedPosts = post.getReferedPostPosts()
if (referedPosts.length == 0){
return
}
alreadyReferedPosts.concat(referedPosts)
referedPosts.forEach(post => digReferedPost(post, alreadyReferedPosts)
}

既に存在しているノートかのチェックなどが簡単にできたら実現できます。毎回DBに問い合わせることになってそれこそ自滅しかねないので難しい感じです。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。