В файле /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 методов проекта, передавая параметры для генерации статьи в теле 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>"
}
Тот или иной функционал для генерации статей отличается в зависимости от уровня подписки.
- Использование всех словоформ доступно только пользователям c подписками PLUS и PRO
- Использование собственных модулей для генерации статей доступно для пользователей подписки PRO
- На пользователей подписки FREE и PLUS распространяется ограничение на количество генерируемых статей не более двух в час
Ограничения действуют на генерацию статьи как через форму, так и с помощью API.