# UseCase'ы приложения: # Up And Down - система для учета и отслеживания состояния для людей, больных БАР ## UseCase №1 ### 1.Название: Зарегистрировать пользователя ### 2.Актор: Пользователь ### 3.Цель: Внести данные о новом пользователе в систему ### 4.Предусловия: * Пользователь не авторизован в системе * Пользователь с данным login'ом отсутствует в системе ### 5.Основной поток: * Пользователь заходит в приложение на любую страницу * Из-за отсутсвия авторизации приложение перенаправляет его на страницу авторизации * Пользователь кликает по ссылке, ведущей на странице регистрации * На странице регистрации пользователь вводит логин и пароль * Пользователь нажимает кнопку "Зарегистрироваться" * Система выводит сообщение, что пользователь зарегистрирован в приложении ### 6.Альтернативные потоки: #### А1.Пользователь с таким логином уже есть в системе * Процедура регистрации проваливается * Выводится нотификация с сообщением об ошибке по причине наличия такого же логина в системе #### А2.Пользователь оставил пустым логин или пустой/неправильный пароль * При попытке регистрации подсвечиваются незаполненные поля, или поле пароля, если пароль неправильный * Выводится сообщение об ошибке ### 7.Постусловия * Пользователь с указанным логином сохранен в БД ### 8.API-Маршруты * `POST /api/v1/Auth/Register` - Регистрация пользователя ### 9.Контракт #### Register-Request ``` { "login": "ivan_89", "password": "S3cureP@ssw0rd" } ``` ##### Требования к валидации: * login: 3-50 символов, [a–z0–9._-], уникальное значение * password: ≥ 5 символов ##### Response - 201 - Created ``` { "user": { "login": "ivan_89" } } ``` ##### Errors * `409 USER_EXISTS` — пользователь с таким логином уже есть(`A1`) * `422 VALIDATION_FAILED` — пустой логин/неправильный пароль(`A2`) * `400 BAD_REQUEST` — сервер не смог десереализовать JSON ### 10. Используемые сущности ДБ * users(guid(PK), login(unique), hashed_password) ## UseCase №2 ### 1.Название: Авторизация пользователя ### 2.Актор: Пользователь ### 3.Цель: Предоставить пользователю возможность получить его данные в виде дневника болезни ### 4.Предусловия: * Пользователь должен быть зарегистрирован в системе * Пользователь должен быть не авторизован в системе ### 5.Основной поток: * Пользователь заходит в приложение на любую страницу * Из-за отсутствия авторизации приложение перенаправляет его на страницу авторизации * Пользователь вводит свой логин и пароль * Пользователь получает токен, который открывает ему доступ к получению собственных данных ### 6.Альтернативные потоки: #### А1.Введен неправильный логин или неправильный пароль * Пользователь не получает токен, авторизация провалена * Выводится сообщение об ошибке #### А2.Поле логин или пароль оставлены пустыми * При попытке авторизации не происходит запрос токена. Авторизация провалена * Пустые поля подкрашиваются, как ошибочно заполненные * Выводится сообщение об ошибке ### 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.Название: Вход в систему ### 2.Актор: Пользователь ### 3.Цель: Предоставить пользователю поверхностный вывод данных о нем и инструменты для глубокого просмотра данных и их модификации ### 4.Предусловия: * Пользователь имеет актуальный токен, подтверждающий его авторизацию в системе * Пользователь получил токен только что и не успел сделать дополнительных действий ### 5.Основной поток: * Система перенаправляет пользователя на его основную страницу * Система запрашивает и выводит последние записи и схемы лечения его дневника ### 6.Альтернативные потоки: #### А1.Записей в дневнике нет * Заместо вывода записей в дневнике, система выводит заглушку, информирующую пользователя, что дневник пуст * Система делает доступными операции с дневником #### А2.Записи по какой-то причине не подгрузились * Система выводит нотификацию об ошибке и ее причине * Заместо вывода записей, система выводит на этом месте заглушку, информирующую о неправильной работе приложения и предоставляющей для нажатия кнопку перезагрузки страницы ### 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.Название: Просмотр схемы лечения ### 2.Актор: Пользователь ### 3.Цель: Предоставить пользователю список доступных схем лечения ### 4.Предусловия: * Пользователь авторизовался в системе * Пользователь находится на основной странице приложения * Основные данные на этой странице(дневник, схемы) уже выведены системой ### 5.Основной поток: * Пользователь кликает по блоку схемы лечения из списка схем. * Пользователь перенаправляется на страницу детального вывода схемы * Система выводит полную схему лечения: название, список основных лекарств, список срочных лекарств, пояснения когда принимать срочные лекарства ### 6.Альтернативные потоки: #### А1. У данного пользователя отсутствуют схемы * Заместо поверхностного вывода схем списком выводится заглушка с информацией о том, что схем нет #### А2. Детальная информация по схеме не загрузилась * Вывод нотификации об ошибке при загрузке детальной информации * Заместо вывода информации о схеме вывод заглушки, информирующей о неправильной работе приложения и кнопкой перезагрузки приложения ### 7.Постусловия * Пользователь получил подробную информацию о схеме лечения