Нужны два метода работы с картами: оплатить подписку и вернуть за неё деньги. Система должна быть устойчивой к перебоям: нужно, чтобы не было двойных списаний, и чтобы операция гарантированно выполнилась. Нужна интеграция с админкой Django: отображать статусы подписок клиентов в админке, (???). Нужна возможность легко переподключать разные эквайринги, нельзя завязываться конкретное решение.
Исходные данные:
Я пользователь. Я зарегистрировался, и подтвердил свою учетную запись. Мне нужно оплатить подписку, чтобы получить доступ к функционалу кинотеатра.
Действия:
- Я жму "Оплатить подписку".
- Попадаю на форму с выбором плана оплаты (помесячный / Три месяца / Полугодовой / годовой).
- Выбираю его, (возможно, ввожу средство оплаты)
- Жму "оплатить"
- Попадаю на эквайринг
- Вижу статус платежа
- Возвращаюсь в лк
- Иду смотреть кино 🎥
Исходные данные
Я пользователь. Я зарегистрирован, у меня подтвержденная учетная запись, а также у меня есть активная подписка. Я хочу вернуть деньги за неиспользованные месяцы подписки. Если подписка была оформлена менее часа назад, то я возвращаю деньги и за этот месяц тоже (?).
Действия:
- Я жму на кнопку "Отменить подписку".
- Подтверждаю своё решение
- подписка отменена.
Исходные данные
Я администратор. Я хочу:
- Видеть статус подписки у пользователя
- Видеть информацию по платежам: время совершения транзакции, срок подписки, тип подписки
Действия:
- Я захожу в админку
- Нахожу нужного мне пользователя, вижу статус подписки
- Проваливаюсь в платежи/или вижу их на экране пользователя
https://gist.github.com/SBKubric/2442c48395b0fbebbd8d968cd3dea4ae
Уточнить задачу, надо выяснить, есть ли функционал ручного управления списанием вместо плана, и как быть, если мы не управляем отменой подписки
https://developers.cloudpayments.ru/#platezhi-po-podpiske
- id
- subscription type
- sum
- currency
- months
- id
- status
- user_id
- plan_id
- type
- valid_till
- id
- subscription_id
- status
- extra: {данные эквайринга, что-то ещё}
- user_id
- sum
- currency
- id
- status
- subscription_id
- extra: {данные эквайринга, что-то ещё}
- user_id
- sum
- currency
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>
MVP:
- GET payments/<payment_id>
- GET payments/subscription/<subscription_id>
- POST payments/payment
- POST payments/refund
- POST payments/check
- POST payments/confirm
Payment-сервис: API (пик)
- проинициализировать проект + добавить его в movix-конфиги
- Реализовать обёртку над API платежного сервиса Вариант примера
- Описать модели БД при помощи sqlalchemy
- реализовать ручку payment
- реализовать ручку refund
- реализовать ручку /payments/check
- реализовать ручку
Payment-сервис: шедулер (пик)
- проинициализировать проект + добавить его в movix-конфиги
- отслеживание статуса платежа
- отслеживание статуса рефанда
Subscription-сервис (пик)
- проинициализировать проект + добавить его в movix-конфиги
- сделать mock-ручки для бизнес-логики BACKLOG:
- реализовать ручку subscriptions/subscribe
- реализовать ручку subscriptions/unsubscribe
- ???
Админка (пик)
- проинициализировать проект + добавить его в movix-конфиги
- создать заготовку админки
- добавить в админку подписки
- добавить поиск по пользователю
- добавить транзакции
- добавить рефанды (?)
Добавить роли для пользователя (пик)
- добавить роли пользователя (хардкод)
- добавить ручку для проставления роли пользователя (is_superuser = True)
Добавить уведомления (пик)
- уведомление об оплате
- уведомление о рефанде