// app/Console/Commands/SyncProviderServices.php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use App\Models\Service; use App\Models\ServiceSyncLog; class SyncProviderServices extends Command { protected $signature = 'services:sync-provider'; protected $description = 'API provider se services sync karo aur disabled ones panel mai bhi disable karo'; public function handle() { $this->info('Sync shuru ho raha hai...'); // Apne providers — har provider ki API alag ho sakti hai $providers = config('smm.providers'); // config/smm.php mai list foreach ($providers as $provider) { $this->syncProvider($provider); } $this->info('Sync mukammal!'); } private function syncProvider(array $provider): void { try { // Provider API se services fetch karo $response = Http::timeout(30)->post($provider['api_url'], [ 'key' => $provider['api_key'], 'action' => 'services', ]); if (!$response->successful()) { Log::error("SMM Sync: {$provider['name']} API fail", ['status' => $response->status()]); return; } $apiServices = collect($response->json()); // API ka services array // Apne DB mai is provider ke sab services lo $dbServices = Service::where('provider_id', $provider['id'])->get()->keyBy('provider_service_id'); // API response ko map karo ID se $apiServicesMap = $apiServices->keyBy('service'); // 'service' = provider ka ID field // === CHECK 1: Jo API mai disable hain, unhe panel mai bhi disable karo === foreach ($dbServices as $providerServiceId => $dbService) { $apiService = $apiServicesMap->get($providerServiceId); // Agar API mai service hai hi nahi, ya status disabled hai $apiIsActive = $apiService && strtolower($apiService['status'] ?? '') === 'active'; if (!$apiIsActive && $dbService->status === 'active') { // Panel mai disable karo $dbService->update(['status' => 'disabled']); // Log likhو ServiceSyncLog::create([ 'service_id' => $dbService->id, 'service_name' => $dbService->name, 'provider_service_id' => $providerServiceId, 'action' => 'disabled', 'old_status' => 'active', 'new_status' => 'disabled', 'notes' => $apiService ? 'Provider ne disable kiya' : 'Provider se service hat gayi', ]); $this->warn("Disabled: {$dbService->name} (ID: {$providerServiceId})"); } // === CHECK 2: Rate change check === if ($apiService && isset($apiService['rate'])) { $newRate = (float) $apiService['rate']; if (abs($newRate - (float)$dbService->rate) > 0.0001) { $oldRate = $dbService->rate; $dbService->update(['rate' => $newRate]); ServiceSyncLog::create([ 'service_id' => $dbService->id, 'service_name' => $dbService->name, 'provider_service_id' => $providerServiceId, 'action' => 'rate_changed', 'old_rate' => $oldRate, 'new_rate' => $newRate, 'notes' => "Rate update: {$oldRate} → {$newRate}", ]); } } } } catch (\Exception $e) { Log::error("SMM Sync Exception: {$provider['name']}", ['error' => $e->getMessage()]); $this->error("Error: {$e->getMessage()}"); } } }