Загрузка данных


.

  [Пересланное сообщение]
  Макс Миля, 18 сентября в 13:48
  @startuml
  
  actor "Пользователь" as User
  boundary "Интерфейс приложения" as Interface
  control "Менеджер доступа" as AccessManager
  database "База данных" as Database
  
  loop Пока авторизация не выполнена и количество попыток меньше 3
      activate User
      User -> Interface : Ввести логин и пароль
      deactivate User
  
      activate Interface
      Interface -> AccessManager : Передать данные для авторизации
      activate AccessManager
  
      AccessManager -> Database : Проверить логин и пароль
      activate Database
      Database --> AccessManager : Результат проверки\nучетных данных
      deactivate Database
  
      alt Учетные данные верны
          AccessManager -> Database : Сбросить счетчик\nнеудачных попыток входа
          activate Database
          Database --> AccessManager : Счетчик сброшен
          deactivate Database
  
          AccessManager --> Interface : Авторизация успешна
  
      else Учетные данные неверны
          AccessManager -> Database : Увеличить счетчик последовательных\nнеудачных попыток входа
          activate Database
          Database --> AccessManager : Количество неудачных попыток
          deactivate Database
  
          AccessManager --> Interface : Авторизация не выполнена\nи количество неудачных попыток
          Interface --> User : Сообщить об ошибке и количестве\nоставшихся попыток
          activate User
          deactivate User
      end
  
      deactivate AccessManager
      deactivate Interface
  end
  
  break Три неправильные попытки подряд
      activate AccessManager
      AccessManager -> Database : Заблокировать доступ пользователя
      activate Database
      Database --> AccessManager : Доступ заблокирован
      deactivate Database
  
      AccessManager --> Interface : Сообщить о блокировке доступа
      deactivate AccessManager
  
      activate Interface
      Interface --> User : Оповестить о блокировке доступа
      activate User
      deactivate User
      deactivate Interface
  end
  
  activate Interface
  Interface -> AccessManager : Запросить список доступных книг
  activate AccessManager
  
  AccessManager -> Database : Получить доступные\nпользователю книги
  activate Database
  Database --> AccessManager : Список доступных книг
  deactivate Database
  
  AccessManager --> Interface : Список доступных книг
  deactivate AccessManager
  
  Interface --> User : Отобразить список доступных книг
  deactivate Interface
  
  activate User
  alt Выбрана одна книга
      User -> Interface : Выбрать книгу
  else Выбрана серия книг
      User -> Interface : Выбрать серию книг
  end
  deactivate User
  
  activate Interface
  
  loop Для каждой выбранной книги
      Interface -> AccessManager : Запросить скачивание книги
      activate AccessManager
  
      AccessManager -> Database : Получить файл книги
      activate Database
      Database --> AccessManager : Файл книги
      deactivate Database
  
      AccessManager -> Database : Увеличить количество\nскачанных пользователем книг
      activate Database
      Database --> AccessManager : Общее количество\nскачанных книг
      deactivate Database
  
      AccessManager --> Interface : Файл книги и общее количество\nскачанных книг
      deactivate AccessManager
  
      Interface --> User : Передать файл книги
      activate User
      deactivate User
  
      opt Общее количество скачанных книг равно 101
          Interface -> AccessManager : Передать данные о получении\nдостижения «Книжник»
          activate AccessManager
  
          AccessManager -> Database : Сохранить достижение «Книжник»\nв данных пользователя
          activate Database
          Database --> AccessManager : Достижение сохранено
          deactivate Database
  
          AccessManager --> Interface : Подтвердить сохранение достижения
          deactivate AccessManager
  
          Interface --> User : Оповестить о получении\nдостижения «Книжник»
          activate User
          deactivate User
      end
  end
  
  deactivate Interface
  
  @enduml