Тестовые задания при трудоустройстве.
Описание вакансии и тестовое задание на этапе отбора "тестирование".
Обсуждения, делимся возможным решениями и комментарии.
P.S. если будет активность, будут ещё ТЗ
Ответы (3)
У меня вот такое было:
Тестовое задание:
Создать одностраничный сайт "Гостевую книгу" на любом PHP фреймворке с формой добавления сообщения.
В форме должны быть поля для ввода: Имени, Email, Заголовка, Текста. (При добавлении сообщения необходимо убедиться, что имя не пустое и не содержит символа "+" и используется валидный емаил)
На той же странице должен быть список всех предыдущих сообщений со возможность постраничной навигации (5 сообщений на странице) и возможностью изменить порядок следования (по времени добавления или по заголовки)
Для хранения данных используйте следующие таблицы в БД:
user:
user_id,name,email,http_user_agent,created_at
message
message_id,user_id,title,text
Задание загрузите на публичный репозиторий и пришлите ссылку.
Требования:
PHP
MySQL
Любой PHP фреймворк
Закину свои 5 коп.
Необходимо доработать класс рассылки Newsletter, что бы он отправлял письма и пуш нотификации для юзеров из UserRepository.
За отправку емейла мы считаем вывод в консоль строки: "Email {email} has been sent to user {name}" За отправку пуш нотификации: "Push notification has been sent to user {name} with device_id {device_id}" Так же необходимо реализовать функциональность для валидации емейлов/пушей: 1) Нельзя отправлять письма юзерам с невалидными емейлами 2) Нельзя отправлять пуши юзерам с невалидными device_id. Правила валидации можете придумать сами. 3) Ничего не отправляем юзерам у которых нет имен 4) На одно и то же мыло/device_id - можно отправить письмо/пуш только один раз Для обеспечения возможности масштабирования системы (добавление новых типов отправок и новых валидаторов), можно добавлять и использовать новые классы и другие языковые конструкции php в любом количестве. Реализация должна соответствовать принципам ООП
class Newsletter
{
public function send(): void
{
}
}
class UserRepository
{
public function getUsers(): array
{
return [
[
'name' => 'Ivan',
'email' => '[email protected]',
'device_id' => 'Ks[dqweer4'
],
[
'name' => 'Peter',
'email' => '[email protected]'
],
[
'name' => 'Mark',
'device_id' => 'Ks[dqweer4'
],
[
'name' => 'Nina',
'email' => '...'
],
[
'name' => 'Luke',
'device_id' => 'vfehlfg43g'
],
[
'name' => 'Zerg',
'device_id' => ''
],
[
'email' => '...',
'device_id' => ''
]
];
}
}
Тут реализовать получение объекта(ов) рассылки Newsletter и вызов(ы) метода send()
$newsletter = //... TODO
$newsletter->send();
...