Изменить поведение эндпоинта /api/users/bulk/extend-expiration-date

Сейчас bulkExtendExpirationDateByUuids делает простое прибавление интервала к expire_at:

expire_at = expire_at + <days>

Из-за этого, если подписка уже истекла, продление может вообще не “реанимировать” пользователя.

Пример (истекла давно)

Допустим сейчас 2026-01-14 12:00.

  • expire_at = 2026-01-07 12:00 (истекла 7 дней назад)

  • extendDays = 1

Текущее поведение:

  • станет expire_at = 2026-01-08 12:00 (то есть 6 дней назад)

  • по факту подписка всё равно просрочена

Пример (истекла недавно)

Сейчас 2026-01-14 12:00.

  • expire_at = 2026-01-13 12:00 (истекла вчера)

  • extendDays = 1

Текущее поведение:

  • станет expire_at = 2026-01-14 12:00 (то есть ровно сейчас, без запаса)

Предложение по логике продления

На мой взгляд корректнее продлевать “от текущего момента”, если подписка уже истекла:

  • Если expire_at < NOW() → установить expire_at = NOW() + <days>

  • Если expire_at >= NOW()expire_at = expire_at + <days>

    Также, важно, чтобы при изменении менялся статус на ACTIVE, чтобы пользователь сразу активировался.

То есть по сути: expire_at = GREATEST(expire_at, NOW()) + <days>

Это ожидаемо для пользователя: продление всегда даёт активный период, даже если подписка была просрочена.