Это готовый набор Docker контейнеров на LEMP стеке для выполнения тестового задания с помощью фреймворка Symfony 5.
Для работы над заданием желательно использовать Mac OS, либо Ubuntu. Под другие операционные системы работа контейнера не гарантируется.
Для работы в Mac OS рекомендуется использовать ветку master
Для работы в Ubuntu рекомендуется использовать ветку master-ubuntu
В состав набора входят:
nginx 1.17.8
php-fpm 7.4
mysql 8
Непосредственно в контейнере php-fpm должна вестись работа с фреймворком Symfony 5. Установка и запуск контейнеров используется строго с помощью командной строки.
- Клонировать репозиторий.
- Зайти в корень проекта в командной строке.
- Для работы в Ubuntu для корректной работы файловой системы в файле
.env
в корне проекта нужно заменить идентификаторы пользователя и группы
HOST_USER=user
HOST_GROUP=user
HOST_UID=1000
HOST_GID=1000
на соответствующие Вашему пользователю на хостовой машине. Для получения этих идентификаторов используйте команду id
- Запустить команду
docker-compose build
и ожидать успешной сборки Docker образов. - Запустить команду
docker-compose up -d
и ожидать успешного запуска Docker контейнеров. - Находясь в корне проекта, зайти в PHP контейнер командой
docker exec -it "movies_php" /bin/bash
- Находясь в корне контейнера
movies_php
, запуститьcomposer self-update
и дождаться успешного завершения - Запустить
composer install
и дождаться успешного завершения - Зайти на http://localhost:80 и увидеть приветственную страницу Symfony 5
- Проверить подключение к Mysql командой
bin/console doctrine:query:sql "SHOW TABLES"
В случае успеха в консоли должны увидеть:
int(0)
, так как на этот момент таблиц Вы еще не создали
Находясь в корне проекта запустить последовательно команды
sudo rm -rf .database/db
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
docker system prune
docker-compose build
docker-compose up -d
Вам дана задача реализовать базу фильмов и его участников с использованием PHP 7, Symfony 5 и Mysql 8
В качестве выходного результата Вы должны предоставить методы для работы с этой базой в виде REST API в формате JSON.
Реализация структуры базы данных и в каких объектах этой структуры будут храниться данные ложиться на Ваши плечи.
Необходимо реализовать запись, хранение и выдачу базы фильмов и их участников.
Интерфейсом для обращения к этой базе должны быть методы REST API, формат JSON.
У каждого объекта хранимого в базе обязательно должен быть уникальный идентификатор, по которому в API будет осуществляться выдача информации.
Реализовать следующий функционал REST API для хранения и выдачи информации:
-
создание фильма и создание участника фильма
-
выдача информации о фильме по ID:
- id
- название
- год выпуска
- длительность
- количество участников и их список
- жанр фильма (5 возможных):
- драма
- комедия
- боевик
- ужасы
- мультфильм
-
выдача информации об участнике фильма по ID:
- id
- имя участника
- список фильмов, в которых он участвовал
- жанр фильмов, в котором участвовал этот человек больше всего
- профессия участника (5 возможных):
- актер
- режиссер
- ассистент режиссера
- сценарист
- монтажер
Один и тот же человек может принять участие в нескольких фильмах.
Задача должна быть выполнена в виде Github репозитория. Необходимо сделать fork этого репозитория и внести необходимые изменения. Для проверки задачи предоставить ссылку на получившейся публичный репозиторий, например
https://github.com/username/movies-task
Дедлайна на выполнение задания не ставится, затраченное на выполнение время будет оценено по факту, с учетом качества результата. Плюсом будет, если исполнитель сможет оценить время на выполнение, перед его началом.
Задание поставлено в абстрактном виде, то есть конкретно не указано, как должны называться таблицы, поля и методы, исполнителю нужно сделать этот выбор самому.
При приеме задания будет оцениваться работоспособность методов, структура базы, код, принятые разработчиком решения.
Оценка задачи будет выполняться по следующим приоритетам в порядке убывания:
- Будет оцениваться функциональность API методов - в первую очередь они должны выполнять задачу, описанную в задании. Без выполнения этого пункта результат задания будет сразу отклонен.
- Реализация БД и запросов к ней, реализация API методов.
- Чистота кода и использование современных практик программирования
- Продуманность методов и какие условия учел разработчик при их разработке.
Исполнитель имеет возможность дополнить условия задачи или дополнить функционал API, по своему усмотрению, если объяснит принятое решение.
Так же плюсом будет, если исполнитель опишет трудности, возникшие при выполнении задания, объяснит принятые решения и предложит другие варианты решения задачи.