xytop
@xytop
PHP/RoR web dev & tech lead

Как поправить дизайн системы подписок-биллинга для хостинговой компании?

Никак не могу разработать правильный дизайн БД для системы биллинга. Уже голова кипит..

Вкратце, что необходимо:
Пользователь может покупать/продлевать хостинг
Пользователь может покупать/продлевать домены
Пользователь может зарегистрироваться в облаке и добавить там несколько серверов
Пользователь может добавлять плагины к своим продуктам.

Пример использования:
Пользователь покупает домен.
Пользователь регистрируется в облаке и создает два сервера.
Каждое первое число месяца генерируется инвойс за использование облака.
Пользователь решает что ему нужно обслуживание одного из серверов в облаке - он добавляет аддон "обслуживание серверов" для 1го сервера.
Через 10 дней удаляет этот аддон.
В какое-то время решает, что облако ему не нужно, и удаляет облако.

Вот и сижу-думаю.. как это все красиво в базе данных отразить, чтобы было удобно работать с этим?

Это что-то вроде из серии "сделайте дизайн таблиц за меня" :(

Я пока что придумал такое:
облака - это продукты.. серверы - это подпродукты. аддоны - это тоже подпродукты чего угодно.
Тогда например так может выглядеть структура таблицы products: id, parent_id, name, data, first_period, first_price, second_period, second_price, rebill_times, status
ну и для случая с двумя серверами и аддоном получилось бы:

Products:
1 0 cloud {location: "cloud_location"} 26d 0 1m 0 0 active
2 1 cloud.server {server_id: "abc"} 26d 0 1m 0 0 active
3 1 cloud.server {server_id: "def"} 26d 0 1m 0 0 active
4 2 addon {addon_id: 123} 26d 0 1m 0 0 active

Дальше собираюсь сделать таблицу Orders: id product_id pay_date due_date status
При каждом добавлении в таблицу Products - должен создаваться Order в соответствии с first_period
Ну и после каждого прохода крона по таблице Orders делать в ней новые записи в соответствии с second_period..

Дальше таблица Access: id product_id, start_date end_date
В случае успешного ордера access будет заполняться доступом к определенному продукту.
Ну и при неоплаченном ордере - запись будет удаляться

Ну и вот думаю.. а как активировать правильно продукты-то.. т.е. хостинг и домены сначала должны быть оплачены.. а вот облако может использоваться сразу.. а оплата в начале месяца..

Я решил, что буду просто создавать ордер каждый раз, и если он нулевой - то сразу активировать продукт - если нет - то ждать оплаты. Но проблема в том, что прайс в облаке динамический и зависит от использования.. т.е. для каждого ордера надо получать актуальный прайс если он 0..

В общем, помогите плиз.. хочется все сделать правильно.
  • Вопрос задан
  • 2680 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы