Files
scrum-poker-internal/app/Models/Room.php
T
2026-08-15 13:35:46 +02:00

68 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Override;
class Room extends Model
{
use HasUuids;
protected $fillable = [
'title',
'current_round',
'deck_config',
'revealed_at',
'state_version',
];
protected function casts() :array
{
return [
'current_round' => 'integer',
'state_version' => 'integer',
'revealed_at' => 'immutable_datetime',
'deck_config' => 'array',
];
}
protected static function booted()
{
static::creating(function (Room $room) {
$room->join_code ??= static::generateJoinCode();
});
}
private static function generateJoinCode(): string
{
$alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
do {
$code = '';
for($i = 0; $i < 6; $i++) {
$code .= $alphabet[random_int(0,strlen($alphabet)-1)];
}
} while (static::where('join_code', $code)->exists());
return $code;
}
public function players(): HasMany
{
return $this->hasMany(Player::class);
}
public function vote(): HasMany
{
return $this->hasMany(Vote::class);
}
}