mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 16:12:09 +00:00
65 lines
1.3 KiB
PHP
65 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Concerns\HasUuids;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
|
|
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 votes(): HasMany
|
|
{
|
|
return $this->hasMany(Vote::class);
|
|
}
|
|
}
|