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