# Модель прецедентів

## Загальна схема

<center style="
    border-radius: 4px;
    border: 1px solid #cfd7e6;
    box-shadow: 0 1px 3px 0 rgba(89,105,129,.05), 0 1px 1px 0 rgba(0,0,0,.025);
    padding: 1em;
">

@startuml

    :Гість: as Guest
    :Зареєстрований користувач: as AuthorisedUser

    (<b>ACCOUNT.CREATE</b>\nСтворити обліковий запис) as CreateAccount
    (<b>ACCOUNT.DELETE</b>\nВидалити обліковий запис) as DeleteAccount
    (<b>ACCOUNT.MODIFY</b>\nЗмінити властивості облікового запису) as ModifyAccount
    (<b>USER.CREATE_SURVEY</b>\nСтворити опитування) as CreateSurvey
    (<b>USER.DELETE_SURVEY</b>\nВидалити опитування) as DeleteSurvey
    (<b>USER.GET_SURVEY_RESULT</b>\nПереглянути відповіді на опитування) as GetSurveyResult
    (<b>USER.LOGIN</b>\nПройти ідентифікацію в системі) as LogIn
    (<b>USER.LOGOUT</b>\nСкинути дані про ідентифікацію в системі) as LogOut
    (<b>USER.MODIFY_SURVEY</b>\nРедагувати опитування) as ModifySurvey
    (<b>USER.STAT_SURVEY</b>\nПереглянути властивості опитування) as StatSurvey
    (<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey
    (<b>USER.TAKE_NAMED_SURVEY</b>\nПройти поіменне опитування) as TakeNamedSurvey

    Guest -u-> CreateAccount
    Guest --> LogIn
    Guest -r-> TakeAnonSurvey

    AuthorisedUser -r-> ModifyAccount
    AuthorisedUser -u-> DeleteAccount
    AuthorisedUser -u-> LogOut
    AuthorisedUser --> CreateSurvey
    AuthorisedUser -u-> DeleteSurvey
    AuthorisedUser --> StatSurvey
    AuthorisedUser --> ModifySurvey
    AuthorisedUser --> GetSurveyResult
    AuthorisedUser -l-> TakeAnonSurvey
    AuthorisedUser -d-> TakeNamedSurvey

@enduml

</center>

## Схеми використання для окремих діячів

Схема використання для гостя:

@startuml

    :Гість: as Guest

    (<b>ACCOUNT.CREATE</b>\nСтворити обліковий запис) as CreateAccount
    (<b>USER.LOGIN</b>\nПройти ідентифікацію в системі) as LogIn
    (<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey

    Guest -u-> CreateAccount
    Guest --> LogIn
    Guest -r-> TakeAnonSurvey

@enduml

Схема використання для зареєстрованого користувача:

@startuml

    :Зареєстрований користувач: as AuthorisedUser

    (<b>ACCOUNT.DELETE</b>\nВидалити обліковий запис) as DeleteAccount
    (<b>ACCOUNT.MODIFY</b>\nЗмінити властивості облікового запису) as ModifyAccount
    (<b>USER.CREATE_SURVEY</b>\nСтворити опитування) as CreateSurvey
    (<b>USER.DELETE_SURVEY</b>\nВидалити опитування) as DeleteSurvey
    (<b>USER.GET_SURVEY_RESULT</b>\nПереглянути відповіді на опитування) as GetSurveyResult
    (<b>USER.LOGOUT</b>\nСкинути дані про ідентифікацію в системі) as LogOut
    (<b>USER.MODIFY_SURVEY</b>\nРедагувати опитування) as ModifySurvey
    (<b>USER.STAT_SURVEY</b>\nПереглянути властивості опитування) as StatSurvey
    (<b>USER.TAKE_ANON_SURVEY</b>\nПройти анонімне опитування) as TakeAnonSurvey
    (<b>USER.TAKE_NAMED_SURVEY</b>\nПройти поіменне опитування) as TakeNamedSurvey

    AuthorisedUser -r-> ModifyAccount
    AuthorisedUser -u-> DeleteAccount
    AuthorisedUser -u-> LogOut
    AuthorisedUser -d-> CreateSurvey
    AuthorisedUser -u-> DeleteSurvey
    AuthorisedUser --> StatSurvey
    AuthorisedUser -d-> ModifySurvey
    AuthorisedUser --> GetSurveyResult
    AuthorisedUser -l-> TakeAnonSurvey
    AuthorisedUser -d-> TakeNamedSurvey

@enduml

## Сценарії використання
### Для гостя

|         ID        |                                             ACCOUNT.CREATE                                             |
|:-----------------:|:------------------------------------------------------------------------------------------------------:|
|       Назва       |                                        Створити обліковий запис                                        |
|      Учасники     |                                          Користувач, система                                           |
|     Передумови    |                                                Відсутні                                                |
|     Результат     |                                      Обліковий запис користувача                                       |
| Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.002 Ідентичний псевдонім вже існує |
@startuml
    |Користувач|
    start
    : Вводить бажаний псевдонім у поле вводу псевдоніму;
    : Вводить пароль у поле вводу паролю;
    : Натискає на кнопку створення облікового запису;
    |Система|
    : Створює обліковий запис користувача;
    note right #lightpink
        <b>Можливі 001.001, 001.002</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |                                                                                            USER.LOGIN                                                                                           |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                                                  Пройти ідентифікацію в системі                                                                                 |
|      Учасники     |                                                                                       Користувач, система                                                                                       |
|     Передумови    |                                                                                  Користувач має обліковий запис                                                                                 |
|     Результат     |                                                                               Користувач ідентифікований в системі                                                                              |
| Виключні ситуації | 001.001 Користувач ввів заборонені символи в поле псевдоніму<br>001.003 Користувач ввів псевдонім, якого не існує в системі<br>001.004 Користувач ввів неправильний пароль до облікового запису |
@startuml
    |Користувач|
    start
    : Вводить псевдонім у поле вводу псевдоніму;
    : Вводить пароль у поле вводу паролю;
    : Натискає кнопку ідентифікації;
    |Система|
    : Ідентифікує користувача;
    note right #lightpink
        <b>Можливі 001.001, 001.003, 001.004</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |        USER.TAKE_ANON_SURVEY         |
|:-----------------:|:------------------------------------:|
|       Назва       |      Пройти анонімне опитування      |
|      Учасники     |         Користувач, система          |
|     Передумови    |               Відсутні               |
|     Результат     |    Запис відповідей на опитування    |
| Виключні ситуації | 001.006 Запитане опитування не існує |
@startuml
    |Користувач|
    start
    : Переходить на сторінку проходження опитування;
    |Система|
    : Виводить перелік запитань опитування;
    note right #lightpink
        <b>Можлива 001.006</b>
    end note
    |Користувач|
    : Вводить відповіді на запитання;
    : Натискає кнопку надсилання відповідей;
    |Система|
    : Записує відповіді на опитування;
    note right #lightpink
        <b>Можлива 001.006</b>
    end note
    : Виводить прощальне повідомлення;
    |Користувач|
    stop
@enduml

### Для зареєстрованого користувача

|         ID        |               ACCOUNT.DELETE              |
|:-----------------:|:-----------------------------------------:|
|       Назва       |          Видалити обліковий запис         |
|      Учасники     |            Користувач, система            |
|     Передумови    |    Користувач ідентифікований в системі   |
|     Результат     | Відсутність облікового запису користувача |
| Виключні ситуації |   001.005 Користувач не ідентифікований   |
@startuml
    |Користувач|
    start
    : Натискає на кнопку видалення облікового запису;
    |Система|
    : Виводить кнопку-запит на підтвердження видалення облікового запису;
    |Користувач|
    : Натискає на кнопку підтвердження видалення облікового запису;
    |Система|
    : Видаляє обліковий запис;
    note right #lightpink
        <b>Можлива 001.005</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |             ACCOUNT.MODIFY            |
|:-----------------:|:-------------------------------------:|
|       Назва       | Змінити властивості облікового запису |
|      Учасники     |          Користувач, система          |
|     Передумови    |  Користувач ідентифікований в системі |
|     Результат     |  Зміна властивостей облікового запису |
| Виключні ситуації | 001.005 Користувач не ідентифікований |
@startuml
    |Користувач|
    start
    : Натискає на кнопку редагування облікового запису;
    |Система|
    : Виводить інтерфейс для редагування облікового запису;
    note right #lightpink
        <b>Можлива 001.005</b>
    end note
    |Користувач|
    : Вказує бажані зміни властивостей облікового запису;
    : Натискає на кнопку внесення змін до властивостей облікового запису;
    |Система|
    : Змінює властивості облікового запису;
    |Користувач|
    stop
@enduml

|         ID        |                                            USER.CREATE_SURVEY                                            |
|:-----------------:|:--------------------------------------------------------------------------------------------------------:|
|       Назва       |                                           Створити опитування                                            |
|      Учасники     |                                           Користувач, система                                            |
|     Передумови    |                                   Користувач ідентифікований в системі                                   |
|     Результат     |                                           Створене опитування                                            |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.007 Користувач ввів неприпустимі символи в назві опитування |
@startuml
    |Користувач|
    start
    : Переходить на сторінку створення опитування;
    note right #lightpink
        <b>Можлива 001.005</b>
    end note
    |Система|
    : Виводить інтерфейс створення опитування;
    |Користувач|
    : Задає інформацію про запитання та тип опитування;
    : Натискає кнопку збереження опитування;
    |Система|
    : Створює опитування;
    note right #lightpink
        <b>Можлива 001.007</b>
    end note
    : Виводить посилання на проходження опитування;
    |Користувач|
    stop
@enduml

|         ID        |                                                       USER.DELETE_SURVEY                                                      |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                      Видалити опитування                                                      |
|      Учасники     |                                                      Користувач, система                                                      |
|     Передумови    |                            Користувач ідентифікований в системі, користувач є власником опитування                            |
|     Результат     |                                                     Відсутність опитування                                                    |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
    |Користувач|
    start
    : Натискає на кнопку видалення опитування;
    |Система|
    : Виводить запит на підтвердження видалення опитування;
    |Користувач|
    : Натискає на кнопку підтвердження видалення опитування;
    |Система|
    : Видаляє опитування;
    note right #lightpink
        <b>Можливі 001.005, 001.006, 001.008</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |                                                     USER.GET_SURVEY_RESULT                                                    |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                              Переглянути відповіді на опитування                                              |
|      Учасники     |                                                      Користувач, система                                                      |
|     Передумови    |                            Користувач ідентифікований в системі, користувач є власником опитування                            |
|     Результат     |                                             Інформація про відповіді на опитування                                            |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
    |Користувач|
    start
    : Натискає на кнопку перегляду відповідей на опитування;
    |Система|
    : Виводить інформацію про відповіді на опитування;
    note right #lightpink
        <b>Можливі 001.005, 001.006, 001.008</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |               USER.LOGOUT                |
|:-----------------:|:----------------------------------------:|
|       Назва       | Скинути дані про ідентифікацію в системі |
|      Учасники     |           Користувач, система            |
|     Передумови    |   Користувач ідентифікований в системі   |
|     Результат     | Користувач не ідентифікований в системі  |
| Виключні ситуації |  001.005 Користувач не ідентифікований   |
@startuml
    |Користувач|
    start
    : Натискає на кнопку виходу з облікового запису;
    |Система|
    : Скидає інформацію про ідентифікацію користувача;
    note right #lightpink
        <b>Можлива 001.005</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |                                                       USER.MODIFY_SURVEY                                                      |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                                     Редагувати опитування                                                     |
|      Учасники     |                                                      Користувач, система                                                      |
|     Передумови    |                            Користувач ідентифікований в системі, користувач є власником опитування                            |
|     Результат     |                                                       Змінене опитування                                                      |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
    |Користувач|
    start
    : Переходить на сторінку редагування опитування;
    |Система|
    : Виводить інтерфейс редагування опитування;
    note right #lightpink
        <b>Можливі 001.005, 001.006, 001.008</b>
    end note
    |Користувач|
    : Задає інформацію про зміни в опитуванні;
    : Натискає кнопку збереження змін в опитуванні;
    |Система|
    : Змінює опитування;
    |Користувач|
    stop
@enduml

|         ID        |                                                        USER.STAT_SURVEY                                                       |
|:-----------------:|:-----------------------------------------------------------------------------------------------------------------------------:|
|       Назва       |                                               Переглянути властивості опитування                                              |
|      Учасники     |                                                      Користувач, система                                                      |
|     Передумови    |                            Користувач ідентифікований в системі, користувач є власником опитування                            |
|     Результат     |                                             Інформація про властивості опитування                                             |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує<br>001.008 Користувач не є власником опитування |
@startuml
    |Користувач|
    start
    : Натискає на кнопку перегляду інформації про опитування;
    |Система|
    : Виводить інформацію про опитування;
    note right #lightpink
        <b>Можливі 001.005, 001.006, 001.008</b>
    end note
    |Користувач|
    stop
@enduml

|         ID        |        USER.TAKE_ANON_SURVEY         |
|:-----------------:|:------------------------------------:|
|       Назва       |      Пройти анонімне опитування      |
|      Учасники     |         Користувач, система          |
|     Передумови    |               Відсутні               |
|     Результат     |    Запис відповідей на опитування    |
| Виключні ситуації | 001.006 Запитане опитування не існує |
@startuml
    |Користувач|
    start
    : Переходить на сторінку проходження опитування;
    |Система|
    : Виводить перелік запитань опитування;
    note right #lightpink
        <b>Можлива 001.006</b>
    end note
    |Користувач|
    : Вводить відповіді на запитання;
    : Натискає кнопку надсилання відповідей;
    |Система|
    : Записує відповіді на опитування;
    note right #lightpink
        <b>Можлива 001.006</b>
    end note
    : Виводить прощальне повідомлення;
    |Користувач|
    stop
@enduml

|         ID        |                             USER.TAKE_NAMED_SURVEY                            |
|:-----------------:|:-----------------------------------------------------------------------------:|
|       Назва       |                           Пройти поіменне опитування                          |
|      Учасники     |                              Користувач, система                              |
|     Передумови    |                      Користувач ідентифікований в системі                     |
|     Результат     |          Запис відповідей на опитування та відомості про користувача          |
| Виключні ситуації | 001.005 Користувач не ідентифікований<br>001.006 Запитане опитування не існує |
@startuml
    |Користувач|
    start
    : Переходить на сторінку проходження опитування;
    |Система|
    : Виводить перелік запитань опитування;
    note right #lightpink
        <b>Можливі 001.005, 001.006</b>
    end note
    |Користувач|
    : Вводить відповіді на запитання;
    : Натискає кнопку надсилання відповідей;
    |Система|
    : Записує відповіді на опитування та відомості про користувача;
    note right #lightpink
        <b>Можлива 001.006</b>
    end note
    : Виводить прощальне повідомлення;
    |Користувач|
    stop
@enduml
