Коротко. Нужна скользящая неделя (WEEK_ROLLING) и возможность задать дату следующего сброса явно, как expireAt. Сейчас есть только общий понедельник.
Окружение. Панель 3.4.4. Бесплатный тариф вида «N ГБ в неделю». Сейчас стоит NO_RESET, а недельный сброс делает своим кроном бот, как раз потому, что в панели нет скользящей недели.
Как сейчас. WEEK сбрасывает всех разом в понедельник в 00:15 по времени сервера (getNextTrafficResetAt, ветка WEEK). Для недельного лимита это неудобно:
- кто пришёл в воскресенье, через сутки получает полный лимит ещё раз, а кто во вторник, ждёт шесть дней;
- в понедельник весь бесплатный парк одновременно выходит из LIMITED.
Предложение. Две вещи, которые дополняют друг друга.
- Стратегия
WEEK_ROLLINGв списке рядом с остальными: сброс каждые 7 дней от даты пользователя. Лучший якорь —firstConnectedAt: окно начинается, когда человек реально начал пользоваться, а не когда его создал бот, и до первого подключения сброс не нужен вовсе. Если это сложно — отcreatedAt, как вMONTH_ROLLING. - Поле
trafficResetAt— дата следующего сброса, редактируемая через API и UI, какexpireAt. Стратегия задаёт период, поле задаёт якорь: панель заполняет его сама по стратегии, а при сбросе сдвигает на период вперёд. Бот или админ при необходимости переписывает дату руками — например, при переводе с платного тарифа на бесплатный окно должно начинаться с момента перевода, а не с даты регистрации.
{{NEXT_TRAFFIC_RESET_AT}} и subscription-refill-date тогда просто отдают trafficResetAt.
Связано. Отправка хука при сбросе трафика у пользователя — событие о системном сбросе (массив userIds + стратегия). При скользящей стратегии оно особенно нужно: без него бот не узнает, у кого прошёл сброс, и не сможет уведомить пользователя. При WEEK это хотя бы предсказуемый понедельник, при WEEK_ROLLING у каждого своё время.