/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Services/TapService.php
193 строки
5 KB
vivanenko
run taps
29 май 2025, 21:05
29 май 2025, 21:05
b91be9d
Код
Авторство
О чём код?
<?php namespace App\Services; use App\Helpers\PhoneSanitizeHelper; use App\Models\Proxy; use App\Models\Tap; use App\Enums\TapStatus; use App\Enums\TapProcessState; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; class TapService { public static function getProxyStringFromId(int $proxyId): string { $proxy = Proxy::find($proxyId); return sprintf('%s:%s@%s:%s', $proxy->username, $proxy->password, $proxy->ip, $proxy->port); } /** * Create a new tap */ public function create(array $data): Tap { Log::info('Creating new tap', $data); $tap = Tap::create([ 'name' => $data['name'], 'phone' => PhoneSanitizeHelper::sanitize($data['phone']), 'status' => TapStatus::NEW, 'process_state' => TapProcessState::SHUTDOWN, 'proxy' => $data['proxy'] ?? null, 'crm_user_id' => $data['crm_user_id'] ?? null, 'expired_at' => $data['expired_at'] ?? null, 'balance' => $data['balance'] ?? 0, ]); Log::info('Created tap', ['id' => $tap->id]); return $tap; } /** * Update an existing tap */ public function update(Tap $tap, array $data): Tap { Log::info('Updating tap', [ 'tap_id' => $tap->id, 'data' => $data, ]); $tap->update($data); return $tap; } /** * Get active taps */ public function getActive(): Collection { return Tap::active()->get(); } /** * Get expired taps */ public function getExpired(): Collection { return Tap::expired()->get(); } /** * Get taps with errors */ public function getWithErrors(): Collection { return Tap::withErrors()->get(); } /** * Start tap process */ public function startProcess(Tap $tap): Tap { Log::info('Starting tap process', ['tap_id' => $tap->id]); return $tap->updateProcessState(TapProcessState::STARTING, [ 'started_at' => now()->toDateTimeString(), ]); } /** * Stop tap process */ public function stopProcess(Tap $tap): Tap { Log::info('Stopping tap process', ['tap_id' => $tap->id]); return $tap->updateProcessState(TapProcessState::STOPPED, [ 'stopped_at' => now()->toDateTimeString(), ]); } /** * Restart tap process */ public function restartProcess(Tap $tap): Tap { Log::info('Restarting tap process', ['tap_id' => $tap->id]); return $tap->updateProcessState(TapProcessState::RESTARTING, [ 'restarted_at' => now()->toDateTimeString(), ]); } /** * Record process error */ public function recordProcessError(Tap $tap, string $error): Tap { Log::error('Tap process error', [ 'tap_id' => $tap->id, 'error' => $error, ]); return $tap->markAsError($error); } /** * Update tap balance */ public function updateBalance(Tap $tap, float $balance): Tap { Log::info('Updating tap balance', [ 'tap_id' => $tap->id, 'old_balance' => $tap->balance, 'new_balance' => $balance, ]); return $this->update($tap, [ 'balance' => $balance, ]); } /** * Set tap expiration */ public function setExpiration(Tap $tap, \DateTime $expireAt): Tap { Log::info('Setting tap expiration', [ 'tap_id' => $tap->id, 'expire_at' => $expireAt->format('Y-m-d H:i:s'), ]); return $this->update($tap, [ 'expired_at' => $expireAt, ]); } /** * Check tap processes and update their states */ public function checkProcesses(): void { Log::info('Checking tap processes'); $taps = Tap::where('process_state', '!=', TapProcessState::SHUTDOWN) ->where('process_state', '!=', TapProcessState::STOPPED) ->get(); foreach ($taps as $tap) { $this->checkProcess($tap); } } /** * Check single tap process */ private function checkProcess(Tap $tap): void { Log::info('Checking tap process', ['tap_id' => $tap->id]); // Here you would implement the actual process checking logic // For example, checking if the process is still running in supervisor // and updating the state accordingly $tap->recordProcessCheck(); } }