0

そのため、アドニスを使用して、reddit や imgur などの画像ホスティング サイトの非常に基本的なバックエンドを構築しています。ユーザーが投稿に投票できるようにしようとしているときに、コントローラーの 1 つで問題が発生していますが、各ユーザーが投稿ごとに 1 回だけ投票できるように制限しています。

これは私のコントローラークラスファイルです:


'use strict'

const Vote = use('App/Model/Vote')
const Post = use('App/Model/Post')


class VoteController {
  * create (request, response) {
let currentUser = request.authUser
let postId = request.param('post_id')
let data = {}
data.user_id = currentUser.id
data.post_id = postId

let voteCheck = yield Vote.query()
  .where({'post_id': postId,
          'user_id': currentUser.id })
console.log(voteCheck)

if (voteCheck) {
  response.status(401).json({error: "User can only cast 1 vote per post."})
} else {
  let addVote = yield Vote.create(data)
  yield addVote.save();
  let post = yield Post.findBy('id', data.post_id)
  let votes = post.vote_count;
  if (votes === null ) {
    votes = 1;
  } else {
    votes++;
  }
  post.vote_count = votes;
  yield post.save()

  response.status(202).json([post, addVote]);
  }
 }

}

module.exports = 投票コントローラー


私は条件のさまざまな組み合わせで遊んでいます。私の主な問題は、変数「voteCheck」にあります。基本的に、ユーザーが投票すると、authUser の ID と投稿の ID を格納する「votes」テーブルに新しい列が作成されます。条件の前に、その基準に一致する既存の投票を検索するクエリがあり、存在する場合はエラーをスローします。そうでない場合 (else)、新しい投票を作成し、投稿 'vote_count' に 1 を追加します。後者は問題なく動作していますが、まだ投票していないユーザーでも現在エラーが発生しているため、条件付きロジックに問題があると思います。助言がありますか?読んでくれてありがとう!

4

1 に答える 1