Skip to content

Application for generation article content. The diplom project from Skillbox

Notifications You must be signed in to change notification settings

Awesomeapolo13/blablaarticle

Repository files navigation

Сайт по генерации контента статьи

Деплой проекта

В файле /etc/hosts добавить запись 127.0.0.1 blablaarticle.

Собрать и запустить проект командой:

make dc_build
make dc_up

Установить зависимости проекта:

make composer_install

Произвести установку зависимостей yarn командой:

make yarn_install

Сделать сборку скриптов и стилей проекта. Для этого можно использовать одну из ниже указанных команд:

make yarn_dev

либо

make yarn_watch

Загрузить миграции:

make migration_run

Загрузить фикстуры:

make fixtures_load

Затем перейти на localhost:888

Регистрация

Регистрация выполнена через форму. Чтобы зарегистрироваться, необходимо ввести имя, email, пароль и подтвердить его. После заполнения формы на электронную почту придет ссылка. Для завершения регистрации необходимо подтвердить email, перейдя по этой ссылке.

По умолчанию новому пользователю присваивается подписка FREE. Так же происходит генерация API тоекна.

Авторизация

Происходит через форму по паролю и электронной почте. Так же осуществляется проверка подтверждения почты пользователем. Для доступа к функционалу генерации статей по API существует авторизация по Bearer токену.

Все административные разделы доступны лишь пользователям с подтвержденной почтой. Для проверки используется класс Voter, он действует на все методы контроллеров административного раздела.

Профиль

Профиль пользователя доступен только подтвердившим свою почту пользователям. На странице есть форма для изменения пользовательской информации. Так же есть форма для генерации нового токена. Запрос на обновление токена отправляется посредством ajax, далее javascript отображает сообщении об успешном обновлении, либо производит вывод сообщения об ошибке.

Подписки

Подписки хранятся в БД в таблице subscription. В таблице хранятся названия подписок, их стоимость в долларах и опции. Информация о сроке истечения подписки пользователя хранится в поле expire_at таблицы user. При истечении срока подписки она понижается на уровень FREE. За понижение подписки отвечает консольная команда DowngradeExpiredSubscriptionCommand.php, которую cron должен запускать ежедневно.

Рабочий стол

Модули для генерации статей

Страница модулей доступна только пользователям с подпиской уровня PRO. За это отвечает класс Voter. На данной странице отображается список существующих модулей пользователя и форма для их создания.

Список модулей выводится по убыванию с даты создания модуля. Максимальное количество модулей для отображения - 10 шт. В крайней правой колонке существует кнопка для удаления модуля.

Форма для добавления модулей выводится сразу под их списком. Для создания модуля необходимо заполнить поля "Название модуля" и "Код модуля". В качестве кода модуля необходимо использовать html теги и функционал шаблонов twig.

Существуют следующие плейсхолдеры, использование которых допустимо в модулях:

  • {{ keyword }} - для вставки ключевого слова
  • {{ keyword|morph(number) }} - для вставки ключевого слова в определенной словоформе
  • {{ title }} - для вставки заголовка модуля (подзаголовки)
  • {{ paragraph }} - для вставки текста одного абзаца (без тега <p>)
  • {{ paragraphs }} - для вставки случайного количества параграфов от 1 до 3, при этом теги <p> устанавливаются автоматически
  • {{ imageSrc }} - путь к картинке, предполагается использовать внутри тегов <img>

Для плейсхолдера keyword так же существуют 7 словоформ, которые представляют собой форму ключевого слова в определенном падеже (с 0 до 5 - от Именительного до Предложного) или его множественную форму (6). Указываются в разметке они через фильтр twig следующим образом:

{{ keyword|morph(2) }}

Тематики

Тематики представлены отдельным бандлом ArticleThemeBundle. С помощью него можно:

  • получить все возможные тематики;
  • найти конкретную тематику по ее символьному коду slug
  • создавать свои тематики с помощью реализации интерфейса ArticleThemeProvider\ArticleThemeBundle\ThemeProviderInterface

Генерация статей

Общее описание процесса

Генерация статей базируется на паттерне Стратегия. Существует класс контекста - ArticleGenerator, который может генерировать статьи в соответствии с переданной стратегией и объектом модели формы. Результат генерации - строка, содержащая весь контент статьи (html-разметку, текст статьи и пр.). Работа генерации в зависимости от переданной стратегии описана ниже.

Демонстрационная генерация статьи

Реализована классом стратегии DemoArticleGenerationStrategy. Класс DTO для реализации содержит продвигаемое слово и заголовок статьи, прочие параметры заданы по умолчанию. Генерация статей для демонстрации доступна любому неавторизованному пользователю. Сгенерировать статью можно только один раз, после этого id этой статьи записывается в cookie и форма блокируется.

Генерация статьи через форму

Для генерации статей через интерфейс пользователя есть специальная форма. Она позволяет:

  • выбрать тематику статьи;
  • указать заголовок статьи (при его отсутствии, он берется из тематики);
  • указать ее краткое описание;
  • ключевые слова и из словоформы;
  • границы размера статьи (количество блоков для генерации, от и до определенной цифры);
  • продвигаемые слова и их количество;
  • прикрепить файлы.

Генерация статьи по API

Для генерации статьи так же можно осуществлять посредством API методов проекта, передавая параметры для генерации статьи в теле HTTP запроса. Пример такого запроса приложен к проекту и находится в файле createArticle.http

При использовании генерации по API, вместо картинок необходимо отправлять ссылки на них. Эти ссылки будут подставлены в соответствующие блоки как src.

Пример тела запроса:

{
   "theme": "basic",
   "keyword": {
       "0": "EXAMPLE",
       "1": "EXAMPLE",
       "2": "EXAMPLE",
       "3": "EXAMPLE",
       "4": "EXAMPLE",
       "5": "EXAAAAAMPLE",
       "6": "EXAMPLES"
   },
   "title": "Тестовая статья",
   "description": "Тестировем по АПИ",
   "sizeFrom": 4,
   "sizeTo": 6,
   "words": [
       {
           "word": "EXAMPLE1",
           "count": 1
       },
       {
           "word": "EXAMPLE2",
           "count": 2
       }
   ],
   "images": ["https://via.placeholder.com/250x250"]
}

Ответ на запрос:

{
   "title": "Тестовая статья",
   "description": "Статья о EXAAAAAMPLE",
   "body": "<div class=\"media\">\n              <img class=\"mr-3\" src=\"https://via.placeholder.com/250x250\" width=\"250\" height=\"250\" alt=\"\">\n              <div class=\"media-body\">\n                <p>Lorem Ipsum <b>EXAMPLE</b> dolor sit amet, ....</p>\n              </div>\n            </div>"   
}

Ограничения

Тот или иной функционал для генерации статей отличается в зависимости от уровня подписки.

  1. Использование всех словоформ доступно только пользователям c подписками PLUS и PRO
  2. Использование собственных модулей для генерации статей доступно для пользователей подписки PRO
  3. На пользователей подписки FREE и PLUS распространяется ограничение на количество генерируемых статей не более двух в час

Ограничения действуют на генерацию статьи как через форму, так и с помощью API.

About

Application for generation article content. The diplom project from Skillbox

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published