/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Models/TelegramAccount.php
152 строки
3 KB
vivanenko
fix tg account creation
28 май 2025, 13:53
28 май 2025, 13:53
5faa142
Код
Авторство
О чём код?
<?php namespace App\Models; use Carbon\Carbon; use App\Enums\TelegramAccountStatus; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasOne; /** * @property int $id * @property string $phone * @property int|null $proxy_id * @property int|null $user_id * @property string|null $session_id * @property TelegramAccountStatus $status * @property Carbon|null $last_used_at * @property Carbon|null $last_error_at * @property string|null $last_error * @property array|null $metadata * @property Carbon $created_at * @property Carbon $updated_at * @property Carbon|null $deleted_at */ class TelegramAccount extends Model { use HasFactory, SoftDeletes; protected $table = 'telegram_accounts'; protected $fillable = [ 'phone', 'proxy_id', 'user_id', 'session_id', 'status', 'last_used_at', 'last_error_at', 'last_error', 'metadata', 'telegram_account_id', ]; protected $casts = [ 'last_used_at' => 'datetime', 'last_error_at' => 'datetime', 'metadata' => 'array', 'status' => TelegramAccountStatus::class, ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function proxy(): BelongsTo { return $this->belongsTo(Proxy::class); } public function subscription(): HasOne { return $this->hasOne(UserTariffSubscription::class); } public function isActive(): bool { return $this->status === TelegramAccountStatus::ACTIVE; } public function isBanned(): bool { return $this->status === TelegramAccountStatus::BANNED; } public function isDisabled(): bool { return $this->status === TelegramAccountStatus::DISABLED; } public function isNew(): bool { return $this->status === TelegramAccountStatus::NEW; } public function markAsActive(): self { $this->update([ 'status' => TelegramAccountStatus::ACTIVE, 'last_used_at' => now(), 'last_error' => null, 'last_error_at' => null, ]); return $this; } public function markAsBanned(string $error = null): self { $this->update([ 'status' => TelegramAccountStatus::BANNED, 'last_error' => $error, 'last_error_at' => now(), ]); return $this; } public function markAsDisabled(string $reason = null): self { $this->update([ 'status' => TelegramAccountStatus::DISABLED, 'last_error' => $reason, 'last_error_at' => now(), ]); return $this; } public function recordError(string $error): self { $this->update([ 'last_error' => $error, 'last_error_at' => now(), ]); return $this; } public function recordUsage(): self { $this->update([ 'last_used_at' => now(), ]); return $this; } public function updateMetadata(array $data, bool $merge = true): self { $metadata = $merge ? array_merge($this->metadata ?? [], $data) : $data; $this->update([ 'metadata' => $metadata, ]); return $this; } }