Входная точка для сервера: /web/index.php
В файле config.php указаны настройки для бд, под них сделан initial_db.sql. Если нужно чистый проект, нужно указать здесь настройки и создать таблицы, такие как в initial_db.sql.
В initial_db.sql создается все нужные настройки бд:
- база данных library
- пользователь api_library со всеми правами только для бд library
- таблицы
- тестовые данные
/api/book - uri для доступа к API книг
/api/author - uri для доступа к API книг
/api/edition - uri для доступа к API книг
Действия в каждом api:
- view
- create
- update
- delete
Запрос приходит в соответствующий контроллер, где обрабатывается действием.
Для каждой таблицы в бд существует модель с её свойствами.
Для управления данными в каждой модели есть отдельные контроллеры с действиями.
В приложении создается только одно соединение с бд. Оно же используется всеми моделями.
book:
- id - int, primary key
- name - char(255), unique
- edition_id - int
author:
- id - int, primary key
- name - char(255), unique
edition:
- id - int, primary key
- name - char(255), unique
book_author:
- book_id - int
- author_id - int
Связи:
- book -(many to many)-> author
- book -(many to one)-> edition
Для реализации пагинации добавить построитель запросов. Тогда в контроллере складываем запрос к бд, затем отдаем в объект пагинации. Объект пагинации добавит к запросу offer и limit. После чего вернёт контроллеру для выполнения.
Для определения нужна ли пагинация, можно смотреть на запрос, в который добавить значения номера страницы и количество объектов на странице.
Пользователь заранее должен зарегистрироваться, например, через сайт, и получить токен. Далее данный токен указывать в каждом запросе.
При запуске приложения (класс App) должно проверяться нахождение токена, и в случае его наличия, выполняться получение сущности пользователя и сохранение её в статическую переменную приложения. Для нахождения пользователя и выторизвции отдельный класс Authentication. Далее в любой точке приложения можно получить доступ к сущности, а соответственно к тем или иным данным пользователя.
Отдельно должен быть метод проверки авторизован ли пользователь (в более продвинутом варианте имеет ли доступ к тем или иным действия). Подобный метод может вызываться в контроллере для дополнения данных ответа соответствующими полями. В даном сллучае, он вызывается в методе формирования ответа для дополнения его полем user с значением username авторизованого пользователя. Всё это в случае передачи в запросе соответствующих данных.
Если издание или автор были добавлены к объекту книги, а потом удалены, то при сохранении книги, в книге они останутся.
Класс построения запросов к бд и отдельные унаследованные методы для запросов. Через него же можно было реализовать дополнения, типа пагинации.