99 lines
2.6 KiB
PHP
99 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Arr;
|
|
|
|
use App\Models\Room;
|
|
use App\Models\RoomStatusLog;
|
|
|
|
class RoomObserver
|
|
{
|
|
/**
|
|
* Handle the Room "created" event.
|
|
*/
|
|
public function created(Room $room): void
|
|
{
|
|
RoomStatusLog::create([
|
|
'branch_id' => $room->branch->id,
|
|
'room_id' => $room->id,
|
|
'user_id' => Auth::id()?? 0,
|
|
'is_online' => $room->is_online,
|
|
'status' => $room->status ?? 'error',
|
|
'started_at' => $room->started_at,
|
|
'ended_at' => $room->ended_at,
|
|
'message' => $room->log_message ?? '',
|
|
'source' => $this->getSource($room),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Handle the Room "updated" event.
|
|
*/
|
|
public function updated(Room $room): void
|
|
{
|
|
// 檢查是否有變更狀態
|
|
if ($room->wasChanged()) {
|
|
RoomStatusLog::create([
|
|
'branch_id' => $room->branch->id,
|
|
'room_id' => $room->id,
|
|
'user_id' => Auth::id() ?? 0,
|
|
'is_online' => $room->is_online,
|
|
'status' => $room->status,
|
|
'started_at' =>$room->started_at,
|
|
'ended_at' =>$room->ended_at,
|
|
'message' => $room->log_message ?? '',
|
|
'source' => $this->getSource($room),
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle the Room "deleted" event.
|
|
*/
|
|
public function deleted(Room $room): void
|
|
{
|
|
$message = sprintf(
|
|
"%s:%s%s (%s:%s) 已刪除",
|
|
$room->branch->name,
|
|
$room->type->value,
|
|
$room->name,
|
|
$room->internal_ip,
|
|
$room->port
|
|
);
|
|
RoomStatusLog::create([
|
|
'branch_id' => $room->branch->id,
|
|
'room_id' => $room->id,
|
|
'user_id' => Auth::id() ?? 0,
|
|
'is_online' => $room->is_online,
|
|
'status' => $room->status,
|
|
'started_at' =>$room->started_at,
|
|
'ended_at' =>$room->ended_at,
|
|
'message' => $message,
|
|
'source' => $this->getSource($room),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Handle the Room "restored" event.
|
|
*/
|
|
public function restored(Room $room): void
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Handle the Room "force deleted" event.
|
|
*/
|
|
public function forceDeleted(Room $room): void
|
|
{
|
|
//
|
|
}
|
|
|
|
private function getSource(Room $room): string
|
|
{
|
|
return app()->runningInConsole() ? 'system' : ($room->log_source ?? 'manual');
|
|
}
|
|
}
|