Дмитрий
a709efdee4
feat(кошелёк): две колонки, период, разрез по кампаниям, расшифровка заморозки
...
Владелец 06.08: "кошелёк убогий и неинформативный". Отметил пять слабых мест
из шести. Не отметил только прогноз "надолго ли хватит" - он пополняет по
факту, а не по остатку.
Что теперь на экране:
- слева липкая колонка денег: свободно крупно, и под ней РАСШИФРОВКА
заморозки - какая кампания, сколько заперто, когда вернётся. Раньше стояло
голое "Заморожено 2 507 руб" без единого слова, под что;
- период: сегодня / вчера / 7 дней / 30 дней / свои даты, живёт в адресе
страницы;
- столбики расхода по дням, цвет по каналу, своим CSS без библиотеки;
- таблица "Куда ушли" - строка на кампанию с суммой и долей, клик отбирает
ленту;
- закладки по каналам сохранены, но теперь считаются за выбранный период;
- лента разбита по дням с итогом за день и постраничной догрузкой.
Сервер: две новые сборки RaskryitieZamorozki и OtchyotKoshelka, новая ручка
/api/advertising/wallet/report, лента получила отбор по датам, каналу и
кампании и листание по ключу вместо смещения. Расчёт списаний, заморозки и
возврата по сроку НЕ тронут - правка только про показ.
Найдено по дороге и закрыто:
- чтение отчёта обёрнуто контекстом построчной защиты. Без этого на боевом
запрос вернул бы НОЛЬ строк молча: местная база под суперпользователем
защиту обходит, и мы бы увидели это только у клиента;
- сторож на число запросов мог зеленеть БЕЗ самой ручки - на любой неизвестный
путь портал отвечает страницей с кодом 200. Усилен и проверен вырезанием
маршрута;
- общий форматтер срезал хвостовой ноль: "833,50" превращалось в "833,5". На
это независимо наступили три правки подряд, каждая завела свою копию.
Сведено в formatExact.
Границы суток и группировка по дням считаются ПО МОСКВЕ, а не по Гринвичу.
Сторож взят с живого боевого: запись 69, 2026-08-05 21:00:24 UTC - для
человека это 6 августа. Наивные версии всех трёх мест были написаны нарочно
и увидены красными, прежде чем чинились.
Старые сторожа не выброшены, а перенесены: закладки по каналам переехали в
отчёт вместе с проверкой на 120 строк, отбор ленты по каналу - в проверку
ленты. Каждый переезд назван поимённо.
Проверено: 461 сторож сервера, 2135 сторожей экрана, контроль типов ноль,
статанализ ноль, форматтер чисто, сборка фронта проходит.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-06 11:18:26 +03:00
..
2026-08-02 17:07:07 +03:00
2026-05-08 17:32:58 +03:00
2026-07-28 20:10:18 +03:00
2026-06-17 05:17:12 +03:00
2026-08-05 15:52:34 +03:00
2026-08-05 23:26:49 +03:00
2026-07-28 15:20:13 +03:00
2026-08-03 01:16:23 +03:00
2026-08-02 22:15:46 +03:00
2026-08-02 15:07:24 +03:00
2026-06-17 05:17:12 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 07:13:50 +03:00
2026-08-03 13:22:03 +03:00
2026-05-09 05:33:21 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 07:13:50 +03:00
2026-05-17 07:13:50 +03:00
2026-06-29 11:32:21 +03:00
2026-06-28 08:42:19 +03:00
2026-06-28 10:14:47 +03:00
2026-07-08 15:29:40 +03:00
2026-06-17 05:17:12 +03:00
2026-06-28 12:59:01 +03:00
2026-06-26 04:27:32 +03:00
2026-06-25 18:52:39 +03:00
2026-06-17 05:17:12 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 08:18:44 +03:00
2026-05-18 03:42:41 +03:00
2026-05-18 03:42:41 +03:00
2026-06-28 12:06:56 +03:00
2026-06-28 12:06:56 +03:00
2026-07-14 05:03:38 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 18:09:35 +03:00
2026-08-04 16:23:57 +03:00
2026-08-03 21:30:47 +03:00
2026-08-04 16:23:57 +03:00
2026-08-03 23:40:12 +03:00
2026-07-28 10:01:24 +03:00
2026-08-02 18:09:35 +03:00
2026-08-03 21:30:47 +03:00
2026-08-05 04:26:27 +03:00
2026-08-04 10:40:52 +03:00
2026-08-03 23:40:12 +03:00
2026-08-01 19:50:41 +03:00
2026-07-25 22:36:24 +03:00
2026-08-01 10:37:50 +03:00
2026-08-03 01:16:23 +03:00
2026-07-25 10:54:16 +03:00
2026-07-25 22:00:50 +03:00
2026-08-06 11:18:26 +03:00
2026-08-05 08:32:03 +03:00
2026-08-03 21:30:47 +03:00
2026-08-02 15:07:24 +03:00
2026-06-17 05:17:12 +03:00
2026-07-07 17:50:36 +03:00
2026-06-19 11:29:46 +03:00
2026-05-28 09:52:42 +03:00
2026-08-01 19:50:41 +03:00
2026-06-19 11:29:46 +03:00
2026-08-01 19:50:41 +03:00
2026-05-17 03:28:05 +03:00
2026-06-18 23:33:26 +03:00
2026-06-18 23:33:26 +03:00
2026-07-20 16:47:19 +03:00
2026-08-02 15:07:24 +03:00
2026-07-02 12:04:16 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-07-05 09:02:40 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 17:07:07 +03:00
2026-07-05 06:40:10 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-06-23 03:47:19 +03:00
2026-06-25 12:21:55 +03:00
2026-05-26 20:39:21 +03:00
2026-06-29 11:32:21 +03:00
2026-07-14 13:14:49 +03:00
2026-06-23 09:06:46 +03:00
2026-07-02 12:04:16 +03:00
2026-08-04 16:23:57 +03:00
2026-08-02 17:07:07 +03:00
2026-05-23 18:46:22 +03:00
2026-08-01 10:37:50 +03:00
2026-07-27 19:45:47 +03:00
2026-07-05 06:22:48 +03:00
2026-07-05 06:08:53 +03:00
2026-05-17 03:33:51 +03:00
2026-07-04 18:32:16 +03:00
2026-07-25 20:32:58 +03:00
2026-05-12 10:06:08 +03:00
2026-06-25 12:28:38 +03:00
2026-06-27 12:47:49 +03:00
2026-05-12 20:23:51 +03:00
2026-06-17 13:30:46 +03:00
2026-06-17 05:17:12 +03:00
2026-06-28 12:59:01 +03:00
2026-06-25 12:54:32 +03:00
2026-06-17 05:17:12 +03:00
2026-07-08 07:56:30 +03:00
2026-05-18 03:42:40 +03:00
2026-05-18 03:42:40 +03:00
2026-08-02 17:07:07 +03:00
2026-07-08 18:57:07 +03:00
2026-08-02 17:07:07 +03:00
2026-05-12 09:49:37 +03:00
2026-05-12 20:23:51 +03:00
2026-06-27 12:47:49 +03:00
2026-06-28 12:59:01 +03:00
2026-07-02 12:04:16 +03:00
2026-08-02 17:07:07 +03:00
2026-07-06 10:54:50 +03:00
2026-07-05 15:33:31 +03:00
2026-08-02 15:07:24 +03:00
2026-08-02 15:07:24 +03:00
2026-05-12 20:23:51 +03:00
2026-05-17 02:23:26 +03:00
2026-06-25 13:41:27 +03:00
2026-08-02 15:07:24 +03:00
2026-06-25 12:25:04 +03:00
2026-07-25 20:42:19 +03:00
2026-07-25 20:32:58 +03:00
2026-05-16 10:09:29 +03:00
2026-06-19 17:09:59 +03:00
2026-06-17 05:17:12 +03:00
2026-06-27 10:23:55 +03:00
2026-06-29 11:32:21 +03:00
2026-06-28 12:59:01 +03:00
2026-07-14 08:58:33 +03:00
2026-08-02 17:07:07 +03:00
2026-08-02 17:07:07 +03:00
2026-05-12 09:45:22 +03:00
2026-08-02 15:07:24 +03:00
2026-08-06 11:18:26 +03:00
2026-08-06 11:18:26 +03:00
2026-08-06 11:18:26 +03:00
2026-08-06 11:18:26 +03:00
2026-08-06 11:18:26 +03:00
2026-08-06 06:35:55 +03:00
2026-08-06 06:35:55 +03:00
2026-07-20 16:47:19 +03:00
2026-06-22 20:54:28 +03:00
2026-05-18 03:42:41 +03:00
2026-06-28 12:59:01 +03:00
2026-05-12 15:20:18 +03:00
2026-07-12 13:10:00 +03:00
2026-07-20 16:47:19 +03:00
2026-07-20 16:47:19 +03:00
2026-05-12 20:23:51 +03:00
2026-05-18 03:42:41 +03:00
2026-07-02 12:04:16 +03:00
2026-06-24 16:07:02 +03:00
2026-06-24 16:07:02 +03:00
2026-07-14 13:14:49 +03:00
2026-07-02 12:04:16 +03:00
2026-05-12 22:14:51 +03:00
2026-05-09 11:27:57 +03:00
2026-06-19 11:29:46 +03:00
2026-05-12 09:59:22 +03:00
2026-08-03 01:59:01 +03:00
2026-08-03 01:59:01 +03:00
2026-07-08 15:29:40 +03:00
2026-06-17 05:17:12 +03:00
2026-06-23 11:32:42 +03:00
2026-07-15 21:41:53 +03:00
2026-05-21 08:37:26 +03:00
2026-06-25 19:08:47 +03:00
2026-07-15 21:41:53 +03:00
2026-05-18 14:33:33 +03:00
2026-05-18 03:41:46 +03:00
2026-05-21 08:37:26 +03:00
2026-08-02 15:07:24 +03:00
2026-06-28 12:59:01 +03:00
2026-05-21 08:37:26 +03:00
2026-07-14 13:14:49 +03:00
2026-07-18 12:29:04 +03:00
2026-08-01 16:16:51 +03:00
2026-08-04 14:05:12 +03:00
2026-08-01 13:29:10 +03:00
2026-07-17 08:31:12 +03:00
2026-05-13 13:30:51 +03:00
2026-07-05 06:08:53 +03:00
2026-07-07 16:27:44 +03:00
2026-06-17 07:22:08 +03:00
2026-06-24 16:48:35 +03:00
2026-05-16 12:45:51 +03:00
2026-05-16 12:45:51 +03:00
2026-07-14 09:36:32 +03:00
2026-05-17 08:18:43 +03:00
2026-07-08 18:57:07 +03:00
2026-06-27 13:43:10 +03:00
2026-08-04 14:05:12 +03:00
2026-07-05 04:31:19 +03:00
2026-07-02 18:22:49 +03:00
2026-07-18 15:20:44 +03:00
2026-07-02 19:50:24 +03:00
2026-07-02 19:50:24 +03:00
2026-07-02 20:29:32 +03:00
2026-07-02 20:45:17 +03:00
2026-06-30 13:27:04 +03:00
2026-07-02 21:40:59 +03:00
2026-07-18 14:29:18 +03:00
2026-07-02 20:29:32 +03:00
2026-07-18 15:20:44 +03:00
2026-07-18 14:29:18 +03:00
2026-08-04 13:52:40 +03:00
2026-07-28 09:51:52 +03:00
2026-08-04 13:52:40 +03:00
2026-08-04 13:52:40 +03:00
2026-07-15 16:46:54 +03:00
2026-08-04 18:04:07 +03:00
2026-07-02 18:22:49 +03:00
2026-07-22 18:39:44 +03:00
2026-07-05 19:25:19 +03:00
2026-07-25 13:05:57 +03:00
2026-08-02 17:07:07 +03:00
2026-08-02 17:07:07 +03:00
2026-05-12 20:23:51 +03:00
2026-05-09 05:33:21 +03:00
2026-07-28 12:57:57 +03:00
2026-08-02 13:41:26 +03:00
2026-08-03 12:31:21 +03:00
2026-08-02 23:13:31 +03:00
2026-08-02 18:04:07 +03:00
2026-08-02 22:42:21 +03:00
2026-08-03 01:59:01 +03:00
2026-08-03 01:59:01 +03:00
2026-08-02 22:42:21 +03:00
2026-08-02 17:05:02 +03:00
2026-05-23 20:02:38 +03:00
2026-06-17 03:17:32 +03:00
2026-06-17 03:17:32 +03:00
2026-05-23 18:46:23 +03:00
2026-05-12 09:15:29 +03:00
2026-06-22 21:50:13 +03:00
2026-06-29 11:32:21 +03:00
2026-07-12 12:56:22 +03:00
2026-07-10 08:49:40 +03:00
2026-08-02 17:07:07 +03:00
2026-07-08 18:57:07 +03:00
2026-05-13 01:46:30 +03:00
2026-05-17 02:23:26 +03:00
2026-05-12 20:23:51 +03:00
2026-05-18 03:42:41 +03:00
2026-07-25 20:32:58 +03:00
2026-05-12 20:23:51 +03:00
2026-05-12 09:37:43 +03:00
2026-05-12 11:57:35 +03:00
2026-07-07 17:45:37 +03:00
2026-07-03 17:34:03 +03:00
2026-05-09 10:17:51 +03:00
2026-05-09 03:43:58 +03:00
2026-05-18 03:42:41 +03:00
2026-07-21 16:27:05 +03:00
2026-05-12 20:23:51 +03:00
2026-07-23 13:54:09 +03:00
2026-07-12 13:10:00 +03:00
2026-08-02 22:42:21 +03:00