From 05038ef65d1dff677bde69df89088e859b3bd6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD?= Date: Tue, 19 Aug 2025 05:58:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=BE=D0=B2=D0=B8=D0=BD=D0=B0=20=D1=82?= =?UTF-8?q?=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B3=D0=BE=20UseCase'=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 108 +++++++++++++++++++++++++++++---- db_assets/sql_scripts/init.sql | 4 +- 2 files changed, 98 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 9462435..aaf1a61 100644 --- a/README.md +++ b/README.md @@ -20,26 +20,26 @@ #### А1.Пользователь с таким логином уже есть в системе * Процедура регистрации проваливается * Выводится нотификация с сообщением об ошибке по причине наличия такого же логина в системе -#### А2.Пользователь оставил пустым логин или пароль -* При попытке регистрации подсвечиваются незаполненные поля +#### А2.Пользователь оставил пустым логин или пустой/неправильный пароль +* При попытке регистрации подсвечиваются незаполненные поля, или поле пароля, если пароль неправильный * Выводится сообщение об ошибке ### 7.Постусловия * Пользователь с указанным логином сохранен в БД -### 8.Маршруты -* `/api/v1/auth/register` - Регистрация пользователя +### 8.API-Маршруты +* `POST /api/v1/Auth/Register` - Регистрация пользователя ### 9.Контракт -#### Request +#### Register-Request ``` { "login": "ivan_89", "password": "S3cureP@ssw0rd" } ``` -#### Требования к валидации: +##### Требования к валидации: * login: 3-50 символов, [a–z0–9._-], уникальное значение -* password: ≥ 8 символов +* password: ≥ 5 символов -#### Response - 201 - Created +##### Response - 201 - Created ``` { "user": { @@ -48,13 +48,13 @@ } ``` -#### Errors -* `409 USER_EXISTS` — пользователь с таким логином уже есть -* `422 VALIDATION_FAILED` — пустой логин/неправильный пароль +##### Errors +* `409 USER_EXISTS` — пользователь с таким логином уже есть(`A1`) +* `422 VALIDATION_FAILED` — пустой логин/неправильный пароль(`A2`) * `400 BAD_REQUEST` — сервер не смог десереализовать JSON ### 10. Используемые сущности ДБ -* users(guid, login, hashed_password) +* users(guid(PK), login(unique), hashed_password) ## UseCase №2 ### 1.Название: Авторизация пользователя @@ -79,6 +79,46 @@ ### 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 ### 1.Название: Вход в систему @@ -100,6 +140,50 @@ ### 7.Постусловия * Пользователь видит свои последние записи и может по ним кликнуть, чтобы увидеть подробную информацию * Пользователю доступны операции добавления, модификации и удаления записей, а также схем лечения +### 8.API-Маршруты +* `GET /api/v1/User/Diaries` - получить кусок дневника пользователя (требует Authorization: Bearer ) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20) +* `GET /api/v1/User/TreatmentSchemes` - получить кусок дневника пользователя (требует Authorization: Bearer ) 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 ### 1.Название: Просмотр схемы лечения diff --git a/db_assets/sql_scripts/init.sql b/db_assets/sql_scripts/init.sql index cf08e85..fbbc643 100644 --- a/db_assets/sql_scripts/init.sql +++ b/db_assets/sql_scripts/init.sql @@ -4,7 +4,7 @@ CREATE SCHEMA `up_and_down` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; CREATE TABLE `up_and_down`.`users` ( `guid` CHAR(36) NOT NULL, - `login` VARCHAR(128) NOT NULL, + `login` VARCHAR(128) UNIQUE NOT NULL, `hashed_password` TEXT NOT NULL, PRIMARY KEY (`guid`), UNIQUE INDEX `guid_UNIQUE` (`guid` ASC) @@ -86,7 +86,7 @@ CREATE TABLE `up_and_down`.`medications` ( CREATE TABLE `up_and_down`.`treatment_schemes` ( `guid` CHAR(36) NOT NULL, - `treatnent_name` TEXT NOT NULL, + `treatment_name` TEXT NOT NULL, `medication_guid` CHAR(36) NOT NULL, PRIMARY KEY (`guid`), FOREIGN KEY (`medication_guid`) REFERENCES `medications`(`guid`)