TODO:
Нужно сделать API новостного сайта для управления категориями, статьями
GET /posts - получение всех статей, под high load
POST /post - создание статьи
DELETE /post/<id> - удаление статьи
PUT /post/<id> - обновление статьи
GET /categories - получение списка категорий
Статья должна принадлежать одной категории. Категория должна иметь счетчик количества принадлежащих ей статей.
Необходимо добавить кеширование данных, применить SOLID принципы.
Не нужно реализовывать авторизацию, разделение на роли.
Docker & usage
Set up project, docker, db:
cp .env.example .env
composer install
cd docker
docker-compose build
docker-compose up -d
docker exec -it fpm_news bash
cd {appRootDir}
php yii migrate --migrationPath=@app/modules/api/migrations
Load fixtures (see below)
docker exec -it fpm_news bash
cd {appRootDir}
Web:
Home page: localhost:8090
API doc page: localhost:8090/api/v1/doc
Set Up tests
docker exec -it mysql_news bash
mysql -u root -p
CREATE DATABASE newsHL_test CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON newsHL_test.* TO 'newsHL'@'%';
docker exec -it fpm_news bash
cd {appRootDir}
php yiitest migrate --migrationPath=@app/modules/api/migrations | php yii test-infrastructure/run-migrations
Run tests (commands below):
docker exec -it fpm_news bash
cd {appRootDir}
Fixtures
Generate fixtures:
php yii fixture/generate category --count=100
php yii fixture/generate post --count=1000
Load fixtures:
php yii fixture/load "*"
Tests
Migrations to test db :
php yii test-infrastructure/run-migrations
Run tests:
php vendor/bin/codecept run apiV1
php vendor/bin/codecept run unit