Как правильно построить архитектуру продления подписки на сайте?
Помогите пожалуйста, иначе весь мозг сломал. Вопрос конечно глупый, но все же)
На сайте доступна оплата подписки, так есть возможность при оплате подписки купить дополнительные "слоты". Проблема заключается в следующем, попробую объяснить. Пользьзователь оформляет подписку на месяц и берет 3 слота в базе данных отмечаем, что подписка до n даты и ему доступно 3 слота. Но если по середине месяца он решает докупить подписку и включает уже 6 слотов, обновляем в базе доту подписки, но кол-во слотов обновить мы сразу не можем, ведь до конца первой подписки у него должно быть доступно лишь 3 слота, только лишь после наступления даты новой подписки. Так как же хранить это в базе данных? Хранить дату начала и окончания подписок и кол-во слотов и обновлять количество слотов по крону мне кажется не правильным.
UPD. Слот, например под аккаунт социальной сети для сбора аналитики.
stpnov, Сначала решите как это должно работать с точки зрения пользователя. что и когда ему доступно, как он должен за все это платить, и так далее. опишите ваш "тарифный план" для полльзователя.
А потом уже будете смотреть как это все хранить и организовать.
Сейчас такое ощущение что вы не знаете как оно должно все работать, и потому и каша, но это вопрос в первую очередь не технический.
Robur, на данный момент все реализованно, можно оформить подписку и докупить нужное кол-во слотов. Подписка активно и добавить может он n кол-во слотов. Но проблемы начинаются если он не дожидаясь окончания подписки захочет продлить ее и выбрать уже другое кол-во слотов (больше или меньше). Все верно, мне по большей части нужно логически понять, об этом и прошу.
stpnov, если "логически понять" то это к вам лично вопрос. Как угодно можно сделать.
Например если он хочет продлить не дожидаясь окончания - принимать оплату сейчас а реально давать/забирать слоты по окончанию текущей. Или давать прямо сразу больше слотов но со скидкой, так как подписка уже есть, ну и так далее, насколько фантазии хватит. Посмотрите как это сделано в других сервисах подписок, может какие-то идеи почерпнете.