| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\BelongsTo;
- class UserNotificationSetting extends Model
- {
- use HasFactory;
- protected $fillable = [
- 'user_id',
- 'order_settings',
- 'reclamation_settings',
- 'schedule_settings',
- ];
- protected function casts(): array
- {
- return [
- 'order_settings' => 'array',
- 'reclamation_settings' => 'array',
- 'schedule_settings' => 'array',
- ];
- }
- public function user(): BelongsTo
- {
- return $this->belongsTo(User::class);
- }
- public static function defaultsForUser(int $userId): array
- {
- return [
- 'user_id' => $userId,
- 'order_settings' => [],
- 'reclamation_settings' => [],
- 'schedule_settings' => [],
- ];
- }
- /**
- * Проверяет, включены ли уведомления хотя бы для одного статуса/источника в секции.
- * Секция считается активной если есть хотя бы один true-канал.
- */
- public function isSectionEnabled(string $settingsKey): bool
- {
- $settings = $this->{$settingsKey};
- if (!is_array($settings) || empty($settings)) {
- return false;
- }
- foreach ($settings as $channels) {
- if (is_array($channels) && array_filter($channels)) {
- return true;
- }
- }
- return false;
- }
- /**
- * Возвращает включённые каналы для конкретного статуса/источника.
- * @return array<string, bool> ['browser' => true, 'push' => false, 'email' => true]
- */
- public function getChannelsForKey(string $settingsKey, int|string $key): array
- {
- $settings = $this->{$settingsKey};
- if (!is_array($settings) || !isset($settings[$key])) {
- return [];
- }
- return array_filter($settings[$key]);
- }
- /**
- * Проверяет, включён ли хотя бы один канал для конкретного статуса/источника.
- */
- public function hasEnabledChannelForKey(string $settingsKey, int|string $key): bool
- {
- return !empty($this->getChannelsForKey($settingsKey, $key));
- }
- }
|