Skip to content

Latest commit

 

History

History
184 lines (137 loc) · 6.79 KB

billing.md

File metadata and controls

184 lines (137 loc) · 6.79 KB

Биллинг

Бизнес-требования

Нужны два метода работы с картами: оплатить подписку и вернуть за неё деньги. Система должна быть устойчивой к перебоям: нужно, чтобы не было двойных списаний, и чтобы операция гарантированно выполнилась. Нужна интеграция с админкой Django: отображать статусы подписок клиентов в админке, (???). Нужна возможность легко переподключать разные эквайринги, нельзя завязываться конкретное решение.

История: "Подписка"

Исходные данные:

Я пользователь. Я зарегистрировался, и подтвердил свою учетную запись. Мне нужно оплатить подписку, чтобы получить доступ к функционалу кинотеатра.

Действия:

  • Я жму "Оплатить подписку".
  • Попадаю на форму с выбором плана оплаты (помесячный / Три месяца / Полугодовой / годовой).
  • Выбираю его, (возможно, ввожу средство оплаты)
  • Жму "оплатить"
  • Попадаю на эквайринг
  • Вижу статус платежа
  • Возвращаюсь в лк
  • Иду смотреть кино 🎥

История: "Отмена подписки"

Исходные данные

Я пользователь. Я зарегистрирован, у меня подтвержденная учетная запись, а также у меня есть активная подписка. Я хочу вернуть деньги за неиспользованные месяцы подписки. Если подписка была оформлена менее часа назад, то я возвращаю деньги и за этот месяц тоже (?).

Действия:

  • Я жму на кнопку "Отменить подписку".
  • Подтверждаю своё решение
  • подписка отменена.

История: "Контроль подписок пользователей"

Исходные данные

Я администратор. Я хочу:

  • Видеть статус подписки у пользователя
  • Видеть информацию по платежам: время совершения транзакции, срок подписки, тип подписки

Действия:

  • Я захожу в админку
  • Нахожу нужного мне пользователя, вижу статус подписки
  • Проваливаюсь в платежи/или вижу их на экране пользователя

Техническая реализация

Service Architecture

General Architecture

https://gist.github.com/SBKubric/2442c48395b0fbebbd8d968cd3dea4ae

User Stories

Suscription

Диаграмма_без_названия_Страница_—_2

Refund

image

Recurring subscription

Уточнить задачу, надо выяснить, есть ли функционал ручного управления списанием вместо плана, и как быть, если мы не управляем отменой подписки

https://developers.cloudpayments.ru/#platezhi-po-podpiske

Сущности

Subscription plan

  • id
  • subscription type
  • sum
  • currency
  • months

Subscription

  • id
  • status
  • user_id
  • plan_id
  • type
  • valid_till

Payment

  • id
  • subscription_id
  • status
  • extra: {данные эквайринга, что-то ещё}
  • user_id
  • sum
  • currency

Refund

  • id
  • status
  • subscription_id
  • extra: {данные эквайринга, что-то ещё}
  • user_id
  • sum
  • currency

Внешний интерфейс: API

Subscription

MVP:

  • GET subscriptions/
  • GET subscriptions/<subscription_id>
  • GET subscription/<subscription_id>/payments
  • POST subcriptions/subscribe
  • POST subscription/unsubscribe Backlog:
  • GET subscription/plans/<plan_id>
  • GET subscription/plans
  • POST subscription/plans/new
  • DELETE subscription/plans/<plan_id>

Payments

MVP:

  • GET payments/<payment_id>
  • GET payments/subscription/<subscription_id>
  • POST payments/payment
  • POST payments/refund
  • POST payments/check
  • POST payments/confirm

Админка

SQLAdmin

Список задач

Payment-сервис: API (пик)

  • проинициализировать проект + добавить его в movix-конфиги
  • Реализовать обёртку над API платежного сервиса Вариант примера
  • Описать модели БД при помощи sqlalchemy
  • реализовать ручку payment
  • реализовать ручку refund
  • реализовать ручку /payments/check
  • реализовать ручку

Payment-сервис: шедулер (пик)

  • проинициализировать проект + добавить его в movix-конфиги
  • отслеживание статуса платежа
  • отслеживание статуса рефанда

Subscription-сервис (пик)

  • проинициализировать проект + добавить его в movix-конфиги
  • сделать mock-ручки для бизнес-логики BACKLOG:
  • реализовать ручку subscriptions/subscribe
  • реализовать ручку subscriptions/unsubscribe
  • ???

Админка (пик)

  • проинициализировать проект + добавить его в movix-конфиги
  • создать заготовку админки
  • добавить в админку подписки
  • добавить поиск по пользователю
  • добавить транзакции
  • добавить рефанды (?)

Добавить роли для пользователя (пик)

  • добавить роли пользователя (хардкод)
  • добавить ручку для проставления роли пользователя (is_superuser = True)

Добавить уведомления (пик)

  • уведомление об оплате
  • уведомление о рефанде