Стастистика, выборка кликов + комиссий для дашборда:
Ожидания по трафику на октябрь
Комиссии ~120'000 / сутки на 40к юзеров
Клики ~12'000'000 / сутки на 40к юзеров
Ожидания по трафику на сейчас
Комиссии ~3'000 / сутки на 1к юзеров 375 каждые 3 часа
Клики ~300'000 / сутки на 1к юзеров 37500 каждые 3 часа
```sql=
-- список уникальных офферов для дропдауна
SELECT DISTINCT(programId) FROM clicks
WHERE
userId = $
AND adspaceConnectionStatus = CONNECTED
AND programStatus = 3
-- список уникальных subid для дропдауна
SELECT DISTINCT(subId) FROM clicks WHERE
WHERE
userId = $
AND adspaceConnectionStatus = CONNECTED
AND programStatus = 3
```
```sql
-- грид кликов
SELECT * FROM clicks WHERE
userId = $
AND adspaceConnectionStatus = CONNECTED
AND programStatus = 3
panelId = p
AND subId = s
AND programId = pi
AND `date` BETWEEN df AND dt
-- грид действий
SELECT * FROM commissions WHERE
userId = $
AND adspaceConnectionStatus = CONNECTED
AND programStatus = 3
panelId = p
AND subId = s
AND programId = pi
AND `orderDate` BETWEEN odf AND odt
```
Результат
```json
[{
"date": 2021-07-19
"clicks": 100
"actions": 1
"currencyCode": "EUR"
"profit": 5
}]
```
commission
```json
[{
"id": 0,
"country": "UA",
"order_date": "2021-01-01",
"status": 0,
"payoffid": 10564,
"panel_id": "string",
"program_id": 156433,
"revenue": 120.45,
"sub_id": "test-traffic-email",
"admitad_commission": 4.45,
"currency": "EUR",
"updated_at": 1622693435
}]
fin
[{
"id": auto uuid4
"commisionId": commision.id | null
"payoutId": payout.id | null
"type": enum
"amount": enum
"status":
"datetime":
}]
payouts
[{
???
}]
```
вопросы:
1. валюты всегда евро?
2. admitad_commission - что с ним делать?
3. описания - формируются сами?
4. какие могут быть типы операции?
5. могут ли быть скрытые корректировки?
6. заработок в стате - это все или подтвержденные? (где еще посмотреть те, что в холде, кроме самой их суммы?)
Запись комиссий
прилетает пачка из 1000
[{
"id": 0,
"country": "UA",
"order_date": "2021-01-01",
"status": 0,
"payoffid": 10564,
"panel_id": "string",
"program_id": 156433,
"revenue": 120.45,
"sub_id": "test-traffic-email",
"admitad_commission": 4.45,
"currency": "EUR",
"updated_at": 1622693435
}]
задачи
1. Entity
1. миграции
1. Реализация
1. забираем из пачки все уникальные panel_id
1. забираем из пачки все уникальные program_id (new Map<string, { approved, hold }>)
1. делаем query: ... where panelId in (п.1)
1. делаем query: ... where programId in (п.2)
1. обогащаем чанк новыми данными из п.3 и п.4.
1. bulkCreate в толстую таблицу данными из п.5.
1. bulkCreate в худую таблицу статы данными из п.5.
1. bulkCreate в таблицу user_?? значений из Map
Tables
AdvertiserMarketplaceCommissions
Поля:
1. id: string;
1. commissionId: number;
2. serial: number;
3. adspaceId: string; ----> adspaces
4. panelId: string;
5. programId: number; ----> advertiserMarketplacePrograms
6. countryCode: string;
7. currencyCode: string;
8. orderDate: Date; // индекс
9. commissionStatus: enum; // индекс
10. revenue__origin: number;
11. revenue__nPower: number;
12. admitadCommission__origin: number;
13. admitadCommission__nPower: number;
14. subId: string;
15. createdAt: Date; // наша дата
16. updatedAt: Date; // их дата
UserWorkflowStats
заполняем на основании кликов и комиссий
Поля:
1. id: string;
1. userId: number; // uniq1 // index2
1. date: dateonly; // uniq1 // index2 /// orderDate
1. programId: string; // uniq1 // index3
1. programName: string; ?? проверить нужен ли индекс для DISTINCT
1. subId: string; // uniq1 // index4 // nullable ?
1. clickCount number; /// при каждом поступлении кликов добавить/установить сумму кликов
1. actionCount number; /// при каждом поступлении комиссии +1
1. pendingAmount__origin number; commission status === 0 && += revenue
1. pendingAmount__nPower number;
1. confirmedAmount__origin number; commission status === 1 && += revenue
1. confirmedAmount__nPower number;
1. canceledAmount__origin number; commission status === 2 && += revenue
1. canceledAmount__nPower number;
UserWorkflowStateValues
Поля:
1. id: string;
1. userId: number; // uniq1
1. clickCount number;
1. actionCount number;
1. pendingAmount__origin number; commission status === 0 && += revenue
1. pendingAmount__nPower number;
1. confirmedAmount__origin number; commission status === 1 && += revenue
1. confirmedAmount__nPower number;
1. canceledAmount__origin number; commission status === 2 && += revenue
1. canceledAmount__nPower number;