'boolean', 'last_seen_at' => 'datetime', ]; } /** @return BelongsTo */ public function room(): BelongsTo { return $this->belongsTo(Room::class); } /** @return HasMany */ public function votes(): HasMany { return $this->hasMany(Vote::class); } /** @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(User::class); } public function currentVote(): ?Vote { return $this->votes() ->where('round', $this->room->current_round) ->first(); } public function hasVoted(): bool { return $this->votes() ->where('round', $this->room->current_round) ->exists(); } public function isModerator(): bool { return $this->is_moderator; } public function markAsSeen(): void { $this->update([ 'last_seen_at' => now(), ]); } }