mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-15 10:46:09 +00:00
Added inern app integration
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Rooms;
|
||||
|
||||
use App\Enums\RoomStateChange;
|
||||
use App\Events\RoomStateChanged;
|
||||
use App\Models\Room;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RoomSettingsService
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RoomRealtimeStateService $realtimeState,
|
||||
) {}
|
||||
|
||||
/** @param array{allow_participants_to_manage_rounds: bool, is_persistent: bool} $settings */
|
||||
public function update(Room $room, User $user, array $settings): void
|
||||
{
|
||||
$stateVersion = DB::transaction(function () use ($room, $user, $settings): ?int {
|
||||
$lockedRoom = Room::query()
|
||||
->lockForUpdate()
|
||||
->findOrFail($room->id);
|
||||
|
||||
abort_unless($lockedRoom->owner_id === $user->id, 403);
|
||||
|
||||
$lockedRoom->fill($settings);
|
||||
|
||||
if (! $lockedRoom->isDirty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$lockedRoom->state_version++;
|
||||
$lockedRoom->save();
|
||||
|
||||
return $lockedRoom->state_version;
|
||||
});
|
||||
|
||||
if ($stateVersion === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
RoomStateChanged::dispatch(
|
||||
$room->id,
|
||||
$stateVersion,
|
||||
RoomStateChange::RoomSettingsUpdated,
|
||||
$this->realtimeState->for($room),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user