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