user() !== null; } /** * Get the validation rules that apply to the request. * * @return array|string> */ public function rules(): array { $messageTemplateRules = $this->input('channel') === NotificationChannel::Discord->value ? ['required', 'string', 'max:2000'] : ['nullable', 'string', 'max:2000']; return [ 'name' => ['required', 'string', 'max:255'], 'event_type' => ['required', 'string', Rule::in(NotificationEventType::values())], 'channel' => ['required', 'string', Rule::in(NotificationChannel::values())], 'channel_configuration' => ['nullable', 'array'], 'channel_configuration.allowed_mentions' => ['nullable', 'array'], 'channel_configuration.allowed_mentions.*' => ['nullable', 'string', Rule::in(DiscordAllowedMentionType::values())], 'enabled' => ['required', 'boolean'], 'delivery_url' => ['required', 'string', 'max:2048', 'url'], 'message_template' => $this->messageTemplateRules(), ...$this->notificationFilterRules(), ]; } protected function prepareForValidation(): void { $this->prepareNotificationFiltersForValidation(); } public function withValidator(Validator $validator): void { $this->withNotificationFilterValidator($validator); } /** * @return array */ private function channels(): array { return array_map( static fn (NotificationChannel $channel): string => $channel->value, NotificationChannel::cases(), ); } /** * @return array */ private function eventTypes(): array { return array_map( static fn (NotificationEventType $eventType): string => $eventType->value, NotificationEventType::cases(), ); } /** * @return array */ private function messageTemplateRules(): array { if ($this->input('channel') === NotificationChannel::Discord->value) { return ['required', 'string', 'max:2000']; } return ['nullable', 'string', 'max:2000']; } }