# Лабораторная работа №7 ## Выполнил > ФИ: Зинченко Иван > > ИСУ: 408657 > > Вариант: 21210 Доработать программу из лабораторной работы №6 следующим образом: - Организовать хранение коллекции в реляционной СУБД (PostgresQL). Убрать хранение коллекции в файле. - Для генерации поля id использовать средства базы данных (sequence). - Обновлять состояние коллекции в памяти только при успешном добавлении объекта в БД - Все команды получения данных должны работать с коллекцией в памяти, а не в БД - Организовать возможность регистрации и авторизации пользователей. У пользователя есть возможность указать пароль. - Пароли при хранении хэшировать алгоритмом SHA-256 - Запретить выполнение команд не авторизованным пользователям. - При хранении объектов сохранять информацию о пользователе, который создал этот объект. - Пользователи должны иметь возможность просмотра всех объектов коллекции, но модифицировать могут только принадлежащие им. - Для идентификации пользователя отправлять логин и пароль с каждым запросом. Необходимо реализовать многопоточную обработку запросов. - Для многопоточного чтения запросов использовать `Cached thread pool` - Для многопоточной обработки полученного запроса использовать `Cached thread pool` - Для многопоточной отправки ответа использовать `Fixed thread pool` - Для синхронизации доступа к коллекции использовать синхронизацию чтения и записи с помощью `java.util.concurrent.locks.ReentrantLock` ## Реализация ### БД ```mermaid erDiagram users { serial id PK text login text password "sha256" } products { serial id PK text name coorinates coorinates FK DateTime creation_date long price text part_number long manufacture_cost int unit_of_measure persons person FK } coordinates { int x PK int y PK } persons { text name text passport_id PK int color locations location FK } locations { int x PK int y PK text name } products }|--|| coordinates : "" products }|--|| persons : "" persons }|--|| locations : "" products_owners { products product PK,FK users owner PK,FK } products_owners ||--|| products : "" products_owners }|--|| users : "" db_info { int migration_version PK } ```