PROG_LAB5-7/README.md

86 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №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
}
```