#Тестовое задание
В данном тестовом задании я реализовал новостной сайт.
Данный сайт написан на базе фреймворка Yii 2
- Создать базу данных
yii2basic_newsи пользователя в нейnews_makerCREATE DATABASE `yii2basic_news` CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON `mydb`.* TO `news_maker`@% IDENTIFIED BY 'WxnYMHWymstn6V9Sc99gaDIS4ytwtY3b';
- Выполнить миграции
$ yii migrate
- Выпонить инициализацию
$ yii init
В результате данных действий будут созданные все необходимы структуры и в базе данных будут заведены 3 пользователя (admin, editor, reader) с паролями "123456".
Таблица событий
CREATE TABLE event (
id INT NOT NULL PRIMARY KEY,
class_name VARCHAR(500) NOT NULL COMMENT 'Имя класса, у которого отслеживаем событие',
event_name VARCHAR(500) NOT NULL COMMENT 'Имя отслеживаемого события'
)
ENGINE = InnoDB
COLLATE = utf8_unicode_ci;Таблица каналов связи (email, alert, web-push, telegram, sms)
CREATE TABLE chanel (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL COMMENT 'Наименование канала связи'
)
ENGINE = InnoDB
COLLATE = utf8_unicode_ci;Таблица шаблонов
CREATE TABLE template (
id INT NOT NULL PRIMARY KEY,
text TEXT NOT NULL COMMENT 'Текст шаблона'
)
ENGINE = InnoDB
COLLATE = utf8_unicode_ci;Таблица сообщений (таблица связей, что, кому и как посылать)
CREATE TABLE notice (
id INT NOT NULL PRIMARY KEY,
role_name VARCHAR(50) NOT NULL COMMENT 'Имя роли пользоватлей',
event_id INT COMMENT 'Идентификатор события',
chanel_id INT COMMENT 'Идентификато канала связи',
template_id INT COMMENT 'Идентификато шаблона',
)
ENGINE = InnoDB
COLLATE = utf8_unicode_ci;Все классы моделей потомки ActiveRecord
- Event
- Chanel
- Template
- Notice
Все контроллеры выполнены, как стандартные CRUD, и потомки WebController
- EventController
- TemplateController
- NoticeController
Таблица Chanel заполняет исключительно из миграций, она является не редактируемым справочником. В ней должны быть только те каналы, для которых реализована доставка.
Необходимо будет реализовать
class Bootstrap implements BootstrapInterfaceВ нем нужно будет регистрировать события, за которыми необходимо следить.
Необходимо реализовать TemplateRender который будет отрисовывать шаблоны и подставлять переменные
Для каждого канала наобходимо реализовать свой класс EmailTransport, AlertTransport. Все они должны быть патомками AbstractTransport