Files
timebank-cc-public/app/Console/Commands/DebugPresenceCommand.php
Ronald Huynen 2547717edb Initial commit
2026-03-23 21:37:59 +01:00

93 lines
3.2 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Models\Admin;
use App\Services\PresenceService;
use Illuminate\Console\Command;
use Spatie\Activitylog\Models\Activity;
class DebugPresenceCommand extends Command
{
protected $signature = 'presence:debug {profile_id} {guard=admin}';
protected $description = 'Debug presence status for a specific profile';
public function handle()
{
$profileId = $this->argument('profile_id');
$guard = $this->argument('guard');
$this->info("Debugging presence for Profile ID: {$profileId}, Guard: {$guard}");
$this->info("---");
// Get the model
$modelClass = $this->getModelClass($guard);
$profile = $modelClass::find($profileId);
if (!$profile) {
$this->error("Profile not found!");
return 1;
}
$this->info("Profile: {$profile->name}");
$this->info("---");
// Check cache
$cacheKey = "presence_{$guard}_{$profileId}";
$cached = \Cache::get($cacheKey);
$this->info("Cache Key: {$cacheKey}");
$this->info("Cached Data: " . ($cached ? json_encode($cached) : 'NULL'));
$this->info("---");
// Check recent activities
$this->info("Recent presence activities (last 10 minutes):");
$activities = Activity::where('log_name', PresenceService::PRESENCE_ACTIVITY)
->where('subject_id', $profileId)
->where('subject_type', get_class($profile))
->where('properties->guard', $guard)
->where('created_at', '>=', now()->subMinutes(10))
->latest()
->get();
if ($activities->isEmpty()) {
$this->warn("No recent activities found");
} else {
foreach ($activities as $activity) {
$props = is_string($activity->properties)
? json_decode($activity->properties, true)
: $activity->properties;
$status = $props['status'] ?? 'unknown';
$this->line("- {$activity->created_at}: {$status} ({$activity->description})");
}
}
$this->info("---");
// Check PresenceService
$presenceService = app(PresenceService::class);
$isOnline = $presenceService->isUserOnline($profile, $guard);
$lastSeen = $presenceService->getUserLastSeen($profile, $guard);
$this->info("PresenceService->isUserOnline(): " . ($isOnline ? 'TRUE' : 'FALSE'));
$this->info("PresenceService->getUserLastSeen(): " . ($lastSeen ? $lastSeen->toDateTimeString() : 'NULL'));
$this->info("---");
// Check authentication
$isAuthenticated = auth($guard)->check() && auth($guard)->id() == $profileId;
$this->info("Is authenticated in {$guard} guard: " . ($isAuthenticated ? 'TRUE' : 'FALSE'));
return 0;
}
protected function getModelClass($guard)
{
$map = [
'web' => \App\Models\User::class,
'admin' => \App\Models\Admin::class,
'bank' => \App\Models\Bank::class,
'organization' => \App\Models\Organization::class,
];
return $map[$guard] ?? \App\Models\User::class;
}
}