18
Практика
Здесь и далее все практические задания, связанные
с приложением, выполняются в базе данных bookstore2.
1. Сеанс удаляется, если пользователь выходит из системы,
но если просто закрыть вкладку браузера, сеансы будут
накапливаться. Реализуйте автоматическое удаление
прошлых сеансов пользователя при повторном входе.
2. Реализуйте отсутствующую интерфейсную функцию
webapi.add_to_cart. Функция должна работать только для
пользователей, вошедших в систему. Если книга
присутствует в корзине, количество ее экземпляров не может
быть меньше одного. Проверьте результат в приложении.
Какое обновление таблицы cart_items выполняется при
изменении количества книг — обычное или HOT?
База данных bookstore2 уже создана. При необходимости ее можно
пересоздать с помощью скрипта bookstore2.sql в домашнем каталоге.
1. Внесите изменение в функцию webapi.login: перед тем как создавать
новый сеанс, закройте существующие сеансы этого пользователя,
используя функцию webapi.logout.
Не забудьте выбрать подключение к основному серверу на порту 5432.
(Это значение не выбирается по умолчанию, поскольку в следующих
темах мы будет работать с пулом соединений.)
2. Функция webapi.add_to_cart присутствует в базе, но пуста. Сохраните
ее сигнатуру без изменений. Функция принимает параметры:
●
auth_token — токен;
●
book_id — идентификатор книги;
●
qty — количество (может быть +1 или −1, другие значения считаются
некорректными).
Если qty = +1, надо либо добавить экземпляр книги в корзину (если
такой книги еще нет в корзине), либо увеличить количество
экземпляров на единицу.
Если qty = −1, надо уменьшить количество экземпляров книги в корзине
на единицу. При этом количество не должно быть меньше 1 (чтобы
полностью удалить книгу из корзины, используется другая функция —
webapi.remove_from_cart).
Тип обновления можно узнать в таблице pg_stat_all_tables (вспомните
тему «Архитектура. Многоверсионность» ).