/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Models/UserTariffSubscription.php
159 строк
4 KB
vivanenko
fix tg account creation
28 май 2025, 13:53
28 май 2025, 13:53
5faa142
Код
Авторство
О чём код?
<?php namespace App\Models; use App\Enums\SubscriptionStatus; use DateTime; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; /** * @property int $user_id The ID of the user who owns the subscription * @property int $tariff_id The ID of the tariff subscribed to * @property int|null $order_id The ID of the order that created this subscription * @property DateTime $start_date When the subscription starts * @property DateTime $end_date When the subscription ends * @property SubscriptionStatus $status The current status of the subscription * @property DateTime $created_at When the subscription was created * @property DateTime $updated_at When the subscription was last updated * @property DateTime|null $deleted_at When the subscription was soft deleted */ class UserTariffSubscription extends Model { use HasFactory, SoftDeletes; protected $fillable = [ 'user_id', 'tariff_id', 'order_id', 'start_date', 'end_date', 'status', 'telegram_account_id', ]; protected $casts = [ 'start_date' => 'datetime', 'end_date' => 'datetime', 'status' => SubscriptionStatus::class, ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function tariff(): BelongsTo { return $this->belongsTo(Tariff::class); } public function order(): BelongsTo { return $this->belongsTo(Order::class); } public function taps(): BelongsToMany { return $this->belongsToMany(Tap::class, 'user_tariff_subscription_taps') ->withTimestamps(); } public function telegramAccount(): BelongsTo { return $this->belongsTo(TelegramAccount::class); } public function getUserId(): int { return $this->user_id; } public function getTariffId(): int { return $this->tariff_id; } public function getOrderId(): ?int { return $this->order_id; } public function getStartDate(): DateTime { return $this->start_date; } public function getEndDate(): DateTime { return $this->end_date; } public function getStatus(): SubscriptionStatus { return $this->status; } public function setUserId(int $userId): self { $this->user_id = $userId; return $this; } public function setTariffId(int $tariffId): self { $this->tariff_id = $tariffId; return $this; } public function setOrderId(?int $orderId): self { $this->order_id = $orderId; return $this; } public function setStartDate(DateTime $startDate): self { $this->start_date = $startDate; return $this; } public function setEndDate(DateTime $endDate): self { if ($endDate < $this->start_date) { throw new \InvalidArgumentException('End date cannot be before start date'); } $this->end_date = $endDate; return $this; } public function setStatus(SubscriptionStatus $status): self { $this->status = $status; return $this; } public function isActive(): bool { return $this->status === SubscriptionStatus::ACTIVE && $this->end_date > now(); } public function isExpired(): bool { return $this->status === SubscriptionStatus::EXPIRED || $this->end_date <= now(); } public function isCancelled(): bool { return $this->status === SubscriptionStatus::CANCELLED; } public function isSuspended(): bool { return $this->status === SubscriptionStatus::SUSPENDED; } }