そのため、アドニスを使用して、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 を追加します。後者は問題なく動作していますが、まだ投票していないユーザーでも現在エラーが発生しているため、条件付きロジックに問題があると思います。助言がありますか?読んでくれてありがとう!