|RadioSongPlay where($column, $operator = null, $value = null) * @method static \Illuminate\Database\Eloquent\Builder|RadioSongPlay create($attributes = []) * @method static \Illuminate\Database\Eloquent\Builder|RadioSongPlay orderBy($column, $direction = 'asc') * @method static \Illuminate\Database\Eloquent\Builder|RadioSongPlay latest($column = 'played_at') * * @property string $title * @property string|null $artist * @property string|null $album * @property string|null $artwork_url * @property int|null $duration * @property \Carbon\Carbon $played_at * @property int|null $dj_id * @property array|null $metadata */ class RadioSongPlay extends Model { #[\Override] protected $table = 'radio_song_plays'; #[\Override] protected $guarded = ['id', 'created_at', 'updated_at']; #[\Override] protected $casts = [ 'played_at' => 'datetime', 'metadata' => 'array', 'duration' => 'integer', ]; public static function recordNowPlaying(?string $title, ?string $artist = null, ?array $extra = null): ?self { if (! $title) { return null; } $last = self::latest('played_at')->first(); if ($last && $last->title === $title && $last->artist === $artist) { return null; } $djId = WebsiteSetting::where('key', 'radio_current_dj_id')->first()?->value; return self::create([ 'title' => $title, 'artist' => $artist, 'album' => $extra['album'] ?? null, 'artwork_url' => $extra['artwork_url'] ?? null, 'duration' => $extra['duration'] ?? null, 'played_at' => $extra['played_at'] ?? now(), 'dj_id' => $djId ? (int) $djId : null, 'metadata' => $extra['metadata'] ?? null, ]); } }