ログインしているときに投票できて24時間後に再投票できるシステムを作っているのですが、
現時点だと初回ログイン時の際投票できない使用になっています。
恐らく原因はinitialLoginTimeの初期値がfalseで固定されていて初めて投票するときが対象外になってしまう事だと思うのですが、初回ログイン時でも正常に投票できるように柔軟な処理を実装したいです。
どうかよろしくお願いします。
ArticleVote.vue
<template> <div> <button type="button" class="btn m-0 p-1 btn-peach-gradient" @click="clickVote" > </button> {{ countVotes }} </div> </template> <script> export default { props:{ initialIsVotedBy: { type: Boolean, default: false, }, initialCountVotes: { type: Number, default: 0, }, authorized: { type: Boolean, default: false, }, endpoint: { type: String, }, initialLoginTime: { // 初期値はログインしてから24時間経っていない(false) type: Boolean, default: false, }, }, data(){ return { isVotedBy: this.initialIsVotedBy, countVotes: this.initialCountVotes, loginTime: this.initialLoginTime, } }, methods: { clickVote() { if(!this.authorized) { alert('投票はログイン中のみ使用できます') return }else if(this.initialLoginTime === false) //ログインしてから24時間後かどうか判定しています。 { alert('投票できるのは24時間後です') } this.isVotedBy ? this.notvote() :this.vote() }, async vote() { const response = await axios.put(this.endpoint) this.isVotedBy = true this.loginTime = true this.countVotes = response.data.countVotes }, notvote() { alert('すでに投票済みです') }, }, } </script>
Article.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use App\User; use Carbon\Carbon; class Article extends Model { public function isVotedBy(?User $user): bool { return $user ?(bool)$this->votes->where('id', $user->id)->count() :false; } public function getCountVotesAttribute(): int { return $this->votes->count(); } public function loginTime(?User $user): bool //ログインしてから24時間後かどうかを判定 { $end = Carbon::now(); $start = $end->subHour(24); return $user ? (bool)$this->votes->where('id', $user->id)->whereBetween("last_login_at", [$start, $end]) :false; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 03:13