Skip to content
This repository has been archived by the owner on Sep 19, 2023. It is now read-only.

malverdo/Airlogic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 

Repository files navigation

Airlogic

Оглавление

1.Описание
2.Документация
3.Поднятие проекта
4.Тест
5.Стек
6.Доступы
7.Задача

Описание

REST API JSON приложение для создания автора и книг,поиск по авторам, отображение книг locale

Документация

1.Создание автора
2.Создание Книги
3.Поиск автора
4.Информация о книге

Создание автора

  • Описание: Создание автора, принимает json с обязательным полем 'name'
    Метод: POST
    Адрес:

    /author/create

    Тело:

    {"name":"Лев"} 

    Ответ:

    {"text": "Автор успешно создан","author": {"id": 75365,"name": "Лев","books": []}}

Создание Книги

  • Описание: Создание книги, принимает json с обязательным полем 'name' и 'author_id'
    Метод: POST
    Адрес:

    /book/create

    Тело:

    {"name": "школьная вечеринка","author_id": 75365}

    Ответ:

    {"text": "Книга успешно создана","book": {"id": 75293,"name": "школьная вечеринка два", "author": {"id": 75365,"name": "Лев","books": [{"id": 75292,"name": "школьная вечеринка"}]} } }

Поиск автора

  • Описание: Поиск автора по имени, принимает name
    Метод: GET
    Адрес:
    /author/search?name=Лев
    Ответ:

    { "authors": [{"id": 75365,"name": "Лев","books": [{"id": 75292,"name": "школьная вечеринка"},{"id": 75293, "name": "школьная вечеринка два"}]}]}

Информация о книге

  • Описание: Информация о книге
    Параметры:

    • _locale -- ru|en
    • id -- \d

    Метод: GET
    Адрес:

    /{_locale}/book/{id}

    Ответ:

    {"book": {"id": 75292,"name": "school party","author": {"id": 75365,"name": "a lion", "books": {"1": {"id": 75293,"name": "school party two"} } } } }

Поднятие проекта

Linux

  • Скачать репозиторий в домашнюю папку

  • в файле etc/hosts добавить local

      127.0.0.1 airlogic.local
  • В файле Airlogic/deployment/docker-compose/dev/.env изменить поле HOMENAME на свою домашнюю директорию

  • перейти в Airlogic/deployment/docker-compose/dev выполнить

    docker-compose build
    docker-compose up -d
  • Зайти в котейнер

    docker exec -it dev_airlogic_1 bash
  • Сменить пользователя

    su apps
  • Выполнить команды

    cd ~/airlogic/
    composer install
    php bin/console doctrine:migrations:migrate
    php bin/console doctrine:fixtures:load

Тест

В корне проекта выполнить команду

php ./vendor/bin/phpunite

Стек

  • Symfony 5.4.6
  • php7.4
  • Библиотеки
    • doctrine/orm
    • jms/serialize
    • symfony/validator
    • symfony/test-pack
    • dejurin/php-google-translate-for-free
    • doctrine/doctrine-fixtures-bundle
    • symfony/yaml
    • fzaninotto/faker

Доступы

Postgres

  • host
    172.17.0.1
  • port
    54321
  • login
    postgres
  • password
    root
  • dataBase
    airlogic

Задача

Используя PHP 7 и фреймворк Symfony 5 (последние версии PHP 7.4 и Symfony 5.2), а также Doctrine ORM и с использованием Docker контейнера,
написать REST API для создания и получения книг и авторов из базы данных в формате JSON.

Требования к заданию:
Написать миграцию, засеивающую тестовые таблицы ~10 000 книгами и ~10 000 авторами
Реализовать запросы на создание книги и автора в базе /book/create, /author/create
Реализовать запрос на получение списка книг с автором из базы /book/search c поиском по названию книги
Написать Unit-тест
Используя возможности Symfony по локализации контента, сделать мультиязычный метод получения информации о книге /{lang}/book/{Id},
где {lang} = en|ru и {Id} = Id книги.
Формат ответа: {Id: 1, 'Name':'War and Peace|Война и мир'} - поле Name выводить на языке локализации запроса.

Пример формата сущностей:

Автор: { 
   'Id': 1, 
      'Name': 'Лев Толстой' 
   }

   Книга: { 
      'Id': 1, 
      'Name': ' War and peace|Война и мир', 
      'Author': [ { 
         'Id': 1, 
         'Name': 'Лев Толстой' 
      }] 
   }