parent
c3fc358728
commit
a9f23be3a7
5 changed files with 149 additions and 0 deletions
@ -0,0 +1,61 @@ |
||||
#REST API |
||||
|
||||
##Авторизация |
||||
HTTP заголовок: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 |
||||
Токен возвращается в ответ на `/auth` |
||||
|
||||
##Статус коды ответов |
||||
Успех: 2ХХ Ошибка сервера: 5ХХ Ошибка входящего запроса (включая ошибки бизнес-логики): 4ХХ В ответе возвращается тип ошибки {"error": "E_VALIDATION"} |
||||
|
||||
##Общие ошибки: |
||||
|
||||
* E_VALIDATION Ошибка входящих параметров |
||||
* E_SESSION_EXPIRED Сессия истекла, пользователя нужно направить на форму авторизации |
||||
* E_TOKEN Неправильно сформирован токен |
||||
* E_AUTH Неправильный логин или пароль |
||||
* E_NOT_FOUND Сущность не найдена |
||||
* E_ACCESS Не достаточно прав для просмотра |
||||
|
||||
##Формат ответа |
||||
Ответ от сервера возвращается в JSON. Значение null описывает не установленное значение имеющегося поле. В UI должно выводиться как «Не установлено», прочерк и тп, в инпутах каститься в пустую строку |
||||
|
||||
##Работа с файлами |
||||
Работа с файлами происходит единообразно в данных формы (multipart/form-data): |
||||
|
||||
* загрузка/обновление: POST/PUT {param: text, ..., file: file} |
||||
* удаление: PUT {param: text, ..., file: ''} |
||||
* обновление без изменения файла: PUT {param: text, ...} |
||||
|
||||
|
||||
## CRUD endpoints |
||||
|
||||
Каждая из сущностей, представленных ниже, имеет стандартные точки доступа: |
||||
* `GET /entity` Получить список всех сущностей |
||||
* `POST /entity` Добавить новую сущность |
||||
* `GET /entity/:id` Получить подробную информацию о сущности |
||||
* `PUT /entity/:id` Обновить информацию |
||||
* `DELETE /entity/:id` Удалить сущность |
||||
|
||||
### User |
||||
Управление пользователями |
||||
|
||||
### Course |
||||
Управление курсами |
||||
|
||||
### Lesson |
||||
Управление уроками курсов. Является вложенной сущностью от Course |
||||
|
||||
### Payment, AuthorBalance |
||||
Получение информации об оплатах и управление запросами на вывод |
||||
|
||||
### Comment |
||||
Управление комментариями(модерирование) |
||||
|
||||
### Category |
||||
Управление справочником категорий курсов |
||||
|
||||
### Subscription |
||||
Управление подписками и рассылками пользователям |
||||
|
||||
|
||||
_Форматы запросов и ответов будут подробно описываться с помощью автоматической документации Swagger Documentation Generator for Django REST Framework_ |
||||
@ -0,0 +1,4 @@ |
||||
### [Обзор архитектуры](overview.md) |
||||
### [Описание API](api.md) |
||||
### [Работа с сервисом оплат Paymentwall](paymentwall.md) |
||||
### [Роли и права](roles.md) |
||||
@ -0,0 +1,46 @@ |
||||
##Обзор архитектуры |
||||
|
||||
|
||||
###Backend |
||||
Представляет из себя веб-приложение на Python с использованием |
||||
следующих фреймворков и технологий: Django-2.0.1 |
||||
|
||||
Сервер проекта предоставляет для клиентской части API на основе REST, реализуя методы |
||||
CRUD для целей доступа к персистентным хранилищам данных |
||||
Сервер проекта хранит статические и медиа данные в файловой системе. |
||||
|
||||
Данные хранятся в СУБД PostgreSQL 9.6.6 |
||||
|
||||
###Клиент проекта |
||||
Имеются два клиента проекта: одностраничное приложение (SPA), |
||||
реализующее интерфейс администратора, и серверное приложение для посетителей ресурса |
||||
|
||||
### Приложение администратора систем |
||||
Клиент реализующий административный интерфейс представляет из себя SPA приложение на Javascript с использованием следующих фреймворков и технологий: |
||||
* react-0.14 |
||||
* react-router-2.0 |
||||
* react-redux-4.4 |
||||
* react-bootstrap-0.28 |
||||
* webpack-1.12 |
||||
* sass |
||||
|
||||
### Приложение посетителя ресурса |
||||
Является приложением - набором публичных страниц, которые собираются из шаблонов на сервере. |
||||
Для сложных динамических элементов на клиентской стороне используется React и обращение к методам API на backend. |
||||
|
||||
* Django router |
||||
* Django templates |
||||
* jQuery v3.0.0 |
||||
* react-0.14.7 |
||||
* webpack-1.12 |
||||
|
||||
##Интеграции |
||||
|
||||
* Транзакционные письма Mailgun `django-anymail 1.2` |
||||
* Рассылки писем Mailchimp `python-mailchimp 2.0` |
||||
* СМС-уведомления и рассылки `Twillio twilio 6.10` |
||||
* Получение оплат Paymentwall `paymentwall-python 1.0` |
||||
* Авторизация в FB Facebook `django-facebook 6.0` |
||||
|
||||
###Диаграмма сущностей проекта |
||||
[Диаграмма сущностей проекта.png](https://lh4.googleusercontent.com/GNC1S1-ylduVcPPym4vfV4lrYrkTLB0lFfcevHd6paOv3NRvsB9L0pE9FIRked7d1qk6-h-sxk8RHg=w2560-h1312-rw) |
||||
@ -0,0 +1,18 @@ |
||||
#Paymentwall |
||||
|
||||
Для получения оплат от пользователей с помощью различных платежных систем используется [Paymentwall Checkout API](https://docs.paymentwall.com/integration/checkout-home) |
||||
Функциональные возможности: |
||||
* Единоразовые оплаты разных продуктов с различной стоимостью: курсы, подписки |
||||
* Сохранение платежных реквизитов и оплата через сохраненную карту |
||||
* Добавление новых платежных систем в Личном кабинете |
||||
* Управление купонами в Личном кабинет |
||||
|
||||
|
||||
##Flow |
||||
|
||||
1. Пользователь на сайте выбирает продукт для приобретения |
||||
2. В БД сохраняется информации о приобретаемом продукте и начальном статусе оплаты: `pending` |
||||
3. Информация о его наименование и стоимости передается в API Paymentwall, возвращающий ссылку на платежный виджет |
||||
4. Виджет отображается на странице, все действия по выбору ПС и вводу данных производятся в нем |
||||
5. По завершению оплаты сервер Paymentwall оповещает о ее успешном прохождении или ошибки с помощью Pingback |
||||
6. В БД сохраняется информации о статусе оплаты (`success` или `error`) и изменении баланса AuthorBalance |
||||
@ -0,0 +1,20 @@ |
||||
#Роли и права |
||||
|
||||
* guest - Незарегистрированный посетитетель |
||||
* user - Зарегистрированный посетитель |
||||
* author - Зарегистрированный посетитель с возможностью создавать контент и получать за него вознаграждение |
||||
* admin - Пользователь с максимальными привилегиями |
||||
|
||||
| guest | user | author | admin | |
||||
|--------|-------|---|---| |
||||
| Просматривает публичные страницы | Подтверждает адрес эл.почты | Добавляет курс и уроки | Управляет пользователями | |
||||
| Проходит регистрацию | Редактирует свой профиль | Добавляет работы в галерею курса | Управляет расписанием школы | |
||||
| Подписывается на рассылку | Управляет подписками | Просматривает баланс | Управляет курсами | |
||||
| | Оставляет комментарий | Добавляет запросы на вывод средств | Управляет категориями курсов | |
||||
| | Подает заявку на преподавателя | Отвечает на комментарии | Управляет рассылкой | |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
В системе используется стандартные возможности управления доступом Django https://docs.djangoproject.com/en/2.0/topics/auth/default/#permissions-and-authorization |
||||
Loading…
Reference in new issue