Files
hstream/app/Models/User.php
2026-01-07 16:04:23 +01:00

116 lines
2.4 KiB
PHP

<?php
namespace App\Models;
//use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravelista\Comments\Commenter;
use Illuminate\Support\Facades\DB;
class User extends Authenticatable
{
use HasFactory, Notifiable, Commenter;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name',
'email',
'password',
'locale',
'is_banned',
// Discord
'discord_id',
'discord_name',
'discord_avatar',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
// Laravel defaults
'email_verified_at' => 'datetime',
'password' => 'hashed',
// Other
'name' => 'string',
'email' => 'string',
'locale' => 'string',
'roles' => 'json',
'tag_blacklist' => 'array',
// Discord
'discord_id' => 'integer',
'discord_name' => 'string',
'discord_avatar' => 'string',
];
/**
* Get the user name
*/
public function getUserName(): string
{
if (!$this->discord_name) {
return $this->name;
}
if ($this->discord_name == $this->name)
{
return $this->name;
}
return "{$this->name} ({$this->discord_name})";
}
/**
* Has Many Playlists.
*/
public function playlists(): HasMany
{
return $this->hasMany(Playlist::class);
}
/**
* Has Many Watched Episodes.
*/
public function watched(): HasMany
{
return $this->hasMany(Watched::class);
}
/**
* Has Many Watched Episodes.
*/
public function likes(): int
{
return DB::table('markable_likes')->where('user_id', $this->id)->count();
}
/**
* Has Many Comments.
*/
public function commentCount(): int
{
return DB::table('comments')->where('commenter_id', $this->id)->count();
}
}