Данное тестовое задание предполагает создание нескольких таблиц в БД Sqlite3, моделей для работы с таблицам и апи для получения и создания записей в таблице, а именно:
- Настройка подключения к базе
db.sqlite
вsrc\db\connection.php
- Создание таблиц
users
иpost
в БД вscr\db\initial.php
- Создание класса модели User в
src\Models\User.php
с указанными в задании методами и свойствами - Создание класса модели Post в
src\Models\Post.php
с указанными в задании методами и свойствами - Настройка endpoint для апи по урлам
PUT /api/users
GET /api/users/:id
выполняющими указанные в задании процессы
- Создайте свой пустой репозиторий на github (без форка этого репозитория)
- Скачайте этот репозиторий как zip-архив и распакуйте
- Закоммитьте распакованные файлы в свой пустой репозиторий как
test begin
Нужно убедиться что в php.ini включены нужные расширения: mbstring, curl и sqlite3
Установить composer локально или глобально
Установить зависимости: php composer.phar install
(composer install
)
Проверка будет производиться на версии PHP 8.0.15
В файле src\db\connection.php
должно быть подключение к БД sqlite
В файле scr\db\initial.php
должно быть создание начальных таблиц для работы кода (ссылка на подключение с предыдущего шага будет в аргументе функции):
users
- id - число, уникальный, авто-инкремент
- email - строка
- first_name - строка
- last_name - строка
- password - строка
- created_at - число
post
- id - число, уникальный, авто-инкремент
- title - строка
- body - строка
- creator_id - связь с user.id
- created_at - число
Выполните команду php composer.phar bootstrap
(composer bootstrap
) для выполнения скрипта поднятия таблиц из scr\db\initial.php
Нужно убедиться что база данных создана верно, через программу для просмотра sqlite баз данных
В папке src\Models
должны быть созданы классы User и Post отвечающие за соответствующие таблицы в БД
Экземпляр класса каждой модели должен хранить соответствующие поля как свойства класса, и метод save
для сохранения в таблицу
Класс каждой модели должен иметь статический метод findOne(int | null $id = null)
с необязательным первым аргументом $id, который по переданному $id возвращает запись в соответствующей таблице как экземпляр класса, если $id не передан возвращает последнюю (по ID) запись
При создании записи в таблицах, должен указываться created_at
= текущий unix-timestamp
После записи в таблицу, в экземпляре класса должен установиться ID из БД (полученный авто-инкрементом)
Получить текущее подключение к БД из src\db\connection.php
в коде можно через \App\db\DB::getInstance()->getConnection()
;
Проверьте ваш код командой php composer.phar test:db
(composer test:db
)
В файле src\api
есть класс Api
и метод connection
, нужно дописать класс и метод чтобы принимать следующие запросы:
GET /api/users/:id
- где :id
это число, указывающие ID из таблицы users, на этот запрос должен вернуться ответ в формате JSON с полями из таблицы users по полученному ID, пример:
//Request:
GET /api/users/1
//Response:
{
"id": 1,
"email": "some-email@mail.com",
"first_name": "SomeName",
"last_name": "SomeLastName",
"password": "SomePassword",
"created_at": 1659633384,
}
PUT /api/users
{
"email": :email,
"first_name": :first_name,
"last_name": :last_name,
"password": :password,
}
- где
:email
,:first_name
,:last_name
и:password
это поля в таблице users для создания в ней записи, на этот запрос должен вернуться ответ в формате JSON с полями из таблицы users по полученной после создания записи, пример:
//Request:
PUT /api/users
{
"email": "api-email@mail.com",
"first_name": "ApiName",
"last_name": "ApiLastName",
"password": "ApiPassword",
}
//Response:
{
"id": 23,
"email": "api-email@mail.com",
"first_name": "ApiName",
"last_name": "ApiLastName",
"password": "ApiPassword",
"created_at": 1659633584,
]
Перед проверкой кода, запустите локальный сервер командой: php composer.phar serve
(composer serve
)
Проверьте ваш код командой php composer.phar test:api
(composer test:api
)
Перед проверкой кода, запустите локальный сервер командой: php composer.phar serve
(composer serve
)
Выполните команду php composer.phar test
(composer test
)
Если тест прошел успешно, закоммитьте изменения как test passed
Отправьте своё резюме и ссылку на ваш репозиторий с пройденым тестом на undermuz@gmail.com
Для вопросов по существу тестового задания, или проблем с запуском автоматических тестов, воспользуйтесь Формой создания issue
В заголовке вопроса крато опишите проблему, в описании вопроса содержательно опишите его суть, и приложите информацию о вашем окружении, а именно:
- Версия ОС
- Версия PHP
- Версия Composer
- Способ установки composer: локально или глобально