diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 00000000..ea52c5f4 --- /dev/null +++ b/docs/api.md @@ -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_ \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..072007cb --- /dev/null +++ b/docs/index.md @@ -0,0 +1,4 @@ +### [Обзор архитектуры](overview.md) +### [Описание API](api.md) +### [Работа с сервисом оплат Paymentwall](paymentwall.md) +### [Роли и права](roles.md) \ No newline at end of file diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 00000000..e18fe2fb --- /dev/null +++ b/docs/overview.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) \ No newline at end of file diff --git a/docs/paymentwall.md b/docs/paymentwall.md new file mode 100644 index 00000000..9fd9c5f1 --- /dev/null +++ b/docs/paymentwall.md @@ -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 \ No newline at end of file diff --git a/docs/roles.md b/docs/roles.md new file mode 100644 index 00000000..c947713d --- /dev/null +++ b/docs/roles.md @@ -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 \ No newline at end of file