@energimass

Как реализовать ежечасное списание баланса пользователя?

На сайте имеется таблица users c полями: имя пользователя, пароль баланс и прочее.
У users есть связанная таблица services содержащая service_name, tarif, status, updated_at и прочее.
Если пользователь публикует услугу, то статус меняется на show и соответственно меняется время updated_at. Как при такой структуре организовать ежечасное списание средств с баланса пользователя согласно тарифу в таблице services? Вроде понятно, но допустим скрипт срабатывает каждый час в hh-часов:00-минут, а один из пользователей добавил услугу 2 минуты назад у него произойдет списание как за час.
Как вообще делают такие вещи, может что то нужно поменять в корне?
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
@Barmunk
Не нужно привязываться к абсолютному времени. У каждого пользователя может быть свое время оплаты и сколько минут он может видеть контент (поесть 2 колонки, время оплаты, время истечения услуги). Далее раз в n минут проверяешь всех пользователей, у кого истек тариф, закрываешь услугу. Если скрипт не может осилить проход всех клиентов раз в минуту, увеличиваешь время и пишешь погрешность в тарифе.

Еще бы посоветовал не использовать одно поле "баланс", рано или поздно ты нарвёшься на дэдлоки, плюс очень вероятны ошибочные начисления. Лучше всего использовать систему дебета-кредита, где пишется вся история начисления или списания, а итоговую сумму в кошелке ты высчитываешь динамически.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы