Второй и половина третьего UseCase'а

This commit is contained in:
Антон
2025-08-19 05:58:20 +03:00
parent 95f2737cad
commit 48fd51d01c
2 changed files with 98 additions and 14 deletions
+96 -12
View File
@@ -20,26 +20,26 @@
#### А1.Пользователь с таким логином уже есть в системе #### А1.Пользователь с таким логином уже есть в системе
* Процедура регистрации проваливается * Процедура регистрации проваливается
* Выводится нотификация с сообщением об ошибке по причине наличия такого же логина в системе * Выводится нотификация с сообщением об ошибке по причине наличия такого же логина в системе
#### А2.Пользователь оставил пустым логин или пароль #### А2.Пользователь оставил пустым логин или пустой/неправильный пароль
* При попытке регистрации подсвечиваются незаполненные поля * При попытке регистрации подсвечиваются незаполненные поля, или поле пароля, если пароль неправильный
* Выводится сообщение об ошибке * Выводится сообщение об ошибке
### 7.Постусловия ### 7.Постусловия
* Пользователь с указанным логином сохранен в БД * Пользователь с указанным логином сохранен в БД
### 8.Маршруты ### 8.API-Маршруты
* `/api/v1/auth/register` - Регистрация пользователя * `POST /api/v1/Auth/Register` - Регистрация пользователя
### 9.Контракт ### 9.Контракт
#### Request #### Register-Request
``` ```
{ {
"login": "ivan_89", "login": "ivan_89",
"password": "S3cureP@ssw0rd" "password": "S3cureP@ssw0rd"
} }
``` ```
#### Требования к валидации: ##### Требования к валидации:
* login: 3-50 символов, [a–z0–9._-], уникальное значение * login: 3-50 символов, [a–z0–9._-], уникальное значение
* password: ≥ 8 символов * password: ≥ 5 символов
#### Response - 201 - Created ##### Response - 201 - Created
``` ```
{ {
"user": { "user": {
@@ -48,13 +48,13 @@
} }
``` ```
#### Errors ##### Errors
* `409 USER_EXISTS` — пользователь с таким логином уже есть * `409 USER_EXISTS` — пользователь с таким логином уже есть(`A1`)
* `422 VALIDATION_FAILED` — пустой логин/неправильный пароль * `422 VALIDATION_FAILED` — пустой логин/неправильный пароль(`A2`)
* `400 BAD_REQUEST` — сервер не смог десереализовать JSON * `400 BAD_REQUEST` — сервер не смог десереализовать JSON
### 10. Используемые сущности ДБ ### 10. Используемые сущности ДБ
* users(guid, login, hashed_password) * users(guid(PK), login(unique), hashed_password)
## UseCase №2 ## UseCase №2
### 1.Название: Авторизация пользователя ### 1.Название: Авторизация пользователя
@@ -79,6 +79,46 @@
### 7.Постусловия ### 7.Постусловия
* Сессия пользователя в виде токена сохраняется на сервере * Сессия пользователя в виде токена сохраняется на сервере
* Пользователь перенаправлен на основную страницу, где выводится его дневник болезни * Пользователь перенаправлен на основную страницу, где выводится его дневник болезни
### 8.API-Маршруты
* `POST /api/v1/Auth/Login` - Вход пользователя в систему и получение токена
* `POST /api/v1/Auth/Logout` - Отозвать токен и выйти из системы.
### 9.Контракт
#### Login-Request
```
{
"login": "ivan_89",
"password": "S3cureP@ssw0rd"
}
```
##### Response - 200 - OK
```
{
"token": af32df3bas739f272bd109c823
"expiresIn": 36000000 // 10 часов
}
```
##### Errors
* `401 BAD_CREDENTIALS` — неверный логин/пароль (А1)
* `422 VALIDATION_FAILED` — пустые поля (А2)
#### Logout-Request
```
{
"login": "ivan_89",
"password": "S3cureP@ssw0rd"
}
```
##### Response - 200 - OK
```
{
"token": af32df3bas739f272bd109c823
"expiresIn": 36000000 // 10 часов
}
```
### 10. Используемые сущности ДБ
* users(guid(PK), login(unique), hashed_password)
## UseCase №3 ## UseCase №3
### 1.Название: Вход в систему ### 1.Название: Вход в систему
@@ -100,6 +140,50 @@
### 7.Постусловия ### 7.Постусловия
* Пользователь видит свои последние записи и может по ним кликнуть, чтобы увидеть подробную информацию * Пользователь видит свои последние записи и может по ним кликнуть, чтобы увидеть подробную информацию
* Пользователю доступны операции добавления, модификации и удаления записей, а также схем лечения * Пользователю доступны операции добавления, модификации и удаления записей, а также схем лечения
### 8.API-Маршруты
* `GET /api/v1/User/Diaries` - получить кусок дневника пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20)
* `GET /api/v1/User/TreatmentSchemes` - получить кусок дневника пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20)
### 9.Контракт
#### Diaries-Request
##### Response - 200 - OK
```
{
diaries: [
{
"guid": "e89b6a0c-4b0f-4722-a410-1e0c1864bf8a",
"time": "10.08.2025",
"mania_level": 1,
"depression_level": 2,
"mood_level": 3,
"activity_level": 4,
"appetite_level": 5,
"dream_level": 6,
"anxiety_level": 7,
"treatment_scheme": {
"guid": "bf6d1555-39e9-4d73-8928-4763627f4dd5"
"treatment_name": "Bipolar I Scheme"
"medications": [
{
"guid": "8af2dfa9-3add-413c-9a0e-ff605088f1d5",
"name": "Litii Carbonate",
"dose": 1800,
"unit": "mg",
"is_urgent": false
}
]
}
}
]
}
```
##### Errors
* `401 TOKEN_REQUIRED|TOKEN_EXPIRED` — токен недействителен, либо отсутствует
* `500 DATA_LOAD_FAILED` — ошибка при загрузке данных (А2)
### 10. Используемые сущности ДБ
* users(guid(PK), login(unique), hashed_password)
## UseCase №4 ## UseCase №4
### 1.Название: Просмотр схемы лечения ### 1.Название: Просмотр схемы лечения
+2 -2
View File
@@ -4,7 +4,7 @@ CREATE SCHEMA `up_and_down` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE `up_and_down`.`users` ( CREATE TABLE `up_and_down`.`users` (
`guid` CHAR(36) NOT NULL, `guid` CHAR(36) NOT NULL,
`login` VARCHAR(128) NOT NULL, `login` VARCHAR(128) UNIQUE NOT NULL,
`hashed_password` TEXT NOT NULL, `hashed_password` TEXT NOT NULL,
PRIMARY KEY (`guid`), PRIMARY KEY (`guid`),
UNIQUE INDEX `guid_UNIQUE` (`guid` ASC) UNIQUE INDEX `guid_UNIQUE` (`guid` ASC)
@@ -86,7 +86,7 @@ CREATE TABLE `up_and_down`.`medications` (
CREATE TABLE `up_and_down`.`treatment_schemes` ( CREATE TABLE `up_and_down`.`treatment_schemes` (
`guid` CHAR(36) NOT NULL, `guid` CHAR(36) NOT NULL,
`treatnent_name` TEXT NOT NULL, `treatment_name` TEXT NOT NULL,
`medication_guid` CHAR(36) NOT NULL, `medication_guid` CHAR(36) NOT NULL,
PRIMARY KEY (`guid`), PRIMARY KEY (`guid`),
FOREIGN KEY (`medication_guid`) REFERENCES `medications`(`guid`) FOREIGN KEY (`medication_guid`) REFERENCES `medications`(`guid`)