Go to file
2024-06-12 13:10:53 +03:00
Lab.Client Косметические доработки 2024-06-05 13:14:49 +03:00
Lab.Domain Добавлены пользователи 2024-06-05 13:09:18 +03:00
Lab.Server Исправил баг 2024-06-08 19:45:20 +03:00
.gitignore Добавил подключение к postgres 2024-06-05 00:42:04 +03:00
db.xml Добавлена обработка инпута на сервере 2024-05-29 18:59:45 +03:00
README.md Добавил подключение к postgres 2024-06-05 00:42:04 +03:00
uml-client.png Добавил UML диаграммы 2024-06-12 13:10:53 +03:00
uml-domain.png Добавил UML диаграммы 2024-06-12 13:10:53 +03:00
uml-server.png Добавил UML диаграммы 2024-06-12 13:10:53 +03:00

Лабораторная работа №7

Выполнил

ФИ: Зинченко Иван

ИСУ: 408657

Вариант: 21210

Доработать программу из лабораторной работы №6 следующим образом:

  • Организовать хранение коллекции в реляционной СУБД (PostgresQL). Убрать хранение коллекции в файле.
  • Для генерации поля id использовать средства базы данных (sequence).
  • Обновлять состояние коллекции в памяти только при успешном добавлении объекта в БД
  • Все команды получения данных должны работать с коллекцией в памяти, а не в БД
  • Организовать возможность регистрации и авторизации пользователей. У пользователя есть возможность указать пароль.
  • Пароли при хранении хэшировать алгоритмом SHA-256
  • Запретить выполнение команд не авторизованным пользователям.
  • При хранении объектов сохранять информацию о пользователе, который создал этот объект.
  • Пользователи должны иметь возможность просмотра всех объектов коллекции, но модифицировать могут только принадлежащие им.
  • Для идентификации пользователя отправлять логин и пароль с каждым запросом.

Необходимо реализовать многопоточную обработку запросов.

  • Для многопоточного чтения запросов использовать Cached thread pool
  • Для многопоточной обработки полученного запроса использовать Cached thread pool
  • Для многопоточной отправки ответа использовать Fixed thread pool
  • Для синхронизации доступа к коллекции использовать синхронизацию чтения и записи с помощью java.util.concurrent.locks.ReentrantLock

Реализация

БД

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
    }