---
# System prepended metadata

title: Untitled

---

Стастистика, выборка кликов + комиссий для дашборда:

Ожидания по трафику на октябрь
Комиссии	~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;