Files

215 lines
8.5 KiB
PHP
Raw Permalink Normal View History

2026-08-23 14:16:00 +03:30
<?php
namespace App\Services\Automation;
use App\Models\Product;
class AutomationCatalog
{
public const TRIGGER_SCHEDULE = 'schedule';
public const TRIGGER_EVENT = 'event';
public const TRIGGER_PRICE = 'price';
public const CHANNEL_SMS = 'sms';
public const CHANNEL_IN_APP = 'in_app';
public const EVENTS = [
2026-08-23 17:13:30 +03:30
['key' => 'customer.login', 'name' => 'ورود کاربر'],
2026-08-23 14:16:00 +03:30
['key' => 'order.buy_success', 'name' => 'خرید موفق'],
['key' => 'order.sell_success', 'name' => 'فروش موفق'],
['key' => 'wallet.rial_charge', 'name' => 'شارژ ریالی کیف'],
['key' => 'withdraw.request', 'name' => 'درخواست برداشت ریالی'],
];
/** @return array<string, mixed> */
public function toArray(): array
{
return [
'triggers' => [
2026-08-23 17:13:30 +03:30
['key' => self::TRIGGER_SCHEDULE, 'name' => 'زمان‌دار (هر N روز)'],
['key' => self::TRIGGER_EVENT, 'name' => 'رویداد (سر ضرب / تأخیر)'],
2026-08-23 14:16:00 +03:30
['key' => self::TRIGGER_PRICE, 'name' => 'حرکت قیمت'],
],
2026-08-23 17:13:30 +03:30
'price_windows' => [
['key' => 'calendar_day', 'name' => 'در یک روز (از شروع امروز)'],
['key' => 'from_last', 'name' => 'از آخرین ارسال (پله‌ای)'],
],
'audience_modes' => [
['key' => 'all', 'name' => 'همه کاربران خانگی'],
['key' => 'filter', 'name' => 'با فیلتر شرط'],
],
2026-08-23 14:16:00 +03:30
'events' => self::EVENTS,
'channels' => [
['key' => self::CHANNEL_SMS, 'name' => 'پیامک'],
['key' => self::CHANNEL_IN_APP, 'name' => 'اعلان داخل اپ'],
],
'operators' => [
['key' => 'eq', 'name' => 'مساوی'],
['key' => 'gt', 'name' => 'بزرگ‌تر'],
['key' => 'gte', 'name' => 'بزرگ‌تر یا مساوی'],
['key' => 'lt', 'name' => 'کوچک‌تر'],
['key' => 'lte', 'name' => 'کوچک‌تر یا مساوی'],
['key' => 'not', 'name' => 'نامساوی'],
],
'fields' => $this->fields(),
'products' => Product::query()
->orderBy('id')
->get(['id', 'title'])
->map(fn ($p) => ['id' => (int) $p->id, 'name' => (string) ($p->title ?: ('#'.$p->id))])
->values()
->all(),
'hours' => collect(range(0, 23))->map(fn ($h) => [
'key' => $h,
'name' => str_pad((string) $h, 2, '0', STR_PAD_LEFT).':00',
])->all(),
];
}
/** @return list<array<string, mixed>> */
public function fields(): array
{
return [
[
'key' => 'never_login',
2026-08-23 17:13:30 +03:30
'group' => 'ورود و بازدید',
2026-08-23 14:16:00 +03:30
'name' => 'هرگز وارد اپ نشده',
'inputs' => [],
],
[
'key' => 'last_seen_older_days',
2026-08-23 17:13:30 +03:30
'group' => 'ورود و بازدید',
2026-08-23 14:16:00 +03:30
'name' => 'آخرین بازدید قدیمی‌تر از N روز',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'last_seen_within_days',
2026-08-23 17:13:30 +03:30
'group' => 'ورود و بازدید',
2026-08-23 14:16:00 +03:30
'name' => 'آخرین بازدید در N روز اخیر',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'is_legal',
2026-08-23 17:13:30 +03:30
'group' => 'حساب کاربر',
'name' => 'وضعیت احراز هویت',
2026-08-23 14:16:00 +03:30
'inputs' => [
2026-08-23 17:13:30 +03:30
['key' => 'value', 'type' => 'select', 'label' => 'وضعیت احراز', 'options' => [
2026-08-23 14:16:00 +03:30
['key' => 0, 'name' => 'احراز نشده'],
['key' => 1, 'name' => 'احراز خودکار'],
['key' => 2, 'name' => 'تأیید ادمین'],
]],
],
],
[
'key' => 'active',
2026-08-23 17:13:30 +03:30
'group' => 'حساب کاربر',
'name' => 'حساب فعال / غیرفعال',
2026-08-23 14:16:00 +03:30
'inputs' => [
2026-08-23 17:13:30 +03:30
['key' => 'value', 'type' => 'select', 'label' => 'وضعیت حساب', 'options' => [
2026-08-23 14:16:00 +03:30
['key' => 1, 'name' => 'فعال'],
['key' => 0, 'name' => 'غیرفعال'],
]],
],
],
[
'key' => 'registered_older_days',
2026-08-23 17:13:30 +03:30
'group' => 'حساب کاربر',
2026-08-23 14:16:00 +03:30
'name' => 'ثبت‌نام قدیمی‌تر از N روز',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'registered_within_days',
2026-08-23 17:13:30 +03:30
'group' => 'حساب کاربر',
2026-08-23 14:16:00 +03:30
'name' => 'ثبت‌نام در N روز اخیر',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'orders_count',
2026-08-23 17:13:30 +03:30
'group' => 'حساب کاربر',
2026-08-23 14:16:00 +03:30
'name' => 'تعداد سفارش',
'inputs' => [
2026-08-23 17:13:30 +03:30
['key' => 'op', 'type' => 'operator', 'label' => 'مقایسه'],
['key' => 'value', 'type' => 'number', 'label' => 'تعداد'],
2026-08-23 14:16:00 +03:30
],
],
[
'key' => 'wallet_cash',
2026-08-23 17:13:30 +03:30
'group' => 'کیف پول',
2026-08-23 14:16:00 +03:30
'name' => 'موجودی ریال کیف اصلی',
'inputs' => [
2026-08-23 17:13:30 +03:30
['key' => 'op', 'type' => 'operator', 'label' => 'مقایسه'],
['key' => 'value', 'type' => 'number', 'label' => 'مبلغ (ریال)'],
2026-08-23 14:16:00 +03:30
],
],
[
'key' => 'wallet_gold',
2026-08-23 17:13:30 +03:30
'group' => 'کیف پول',
2026-08-23 14:16:00 +03:30
'name' => 'موجودی طلا کیف اصلی',
'inputs' => [
2026-08-23 17:13:30 +03:30
['key' => 'op', 'type' => 'operator', 'label' => 'مقایسه'],
['key' => 'value', 'type' => 'number', 'label' => 'مقدار (گرم)'],
2026-08-23 14:16:00 +03:30
],
],
[
'key' => 'never_ordered',
2026-08-23 17:13:30 +03:30
'group' => 'خرید و فروش',
2026-08-23 14:16:00 +03:30
'name' => 'هرگز معامله موفق نداشته',
'inputs' => [],
],
[
'key' => 'has_buy_within_days',
2026-08-23 17:13:30 +03:30
'group' => 'خرید و فروش',
2026-08-23 14:16:00 +03:30
'name' => 'خرید موفق در N روز اخیر',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'has_sell_within_days',
2026-08-23 17:13:30 +03:30
'group' => 'خرید و فروش',
2026-08-23 14:16:00 +03:30
'name' => 'فروش موفق در N روز اخیر',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'last_order_older_days',
2026-08-23 17:13:30 +03:30
'group' => 'خرید و فروش',
2026-08-23 14:16:00 +03:30
'name' => 'آخرین معامله موفق قدیمی‌تر از N روز',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'has_deposit_within_days',
2026-08-23 17:13:30 +03:30
'group' => 'شارژ کیف',
2026-08-23 14:16:00 +03:30
'name' => 'شارژ ریالی در N روز اخیر',
'inputs' => [
['key' => 'value', 'type' => 'number', 'label' => 'تعداد روز'],
],
],
[
'key' => 'has_withdraw_pending',
'group' => 'برداشت',
'name' => 'برداشت در انتظار دارد',
'inputs' => [],
],
];
}
public function fieldKeys(): array
{
return array_column($this->fields(), 'key');
}
}