Это старая версия документа!


Концептуальное техническое задание

Мобильное приложение «Фестивали скалолазания» предназначено для регистрации участников на фестивали и самостоятельного ввода результатов.

Должно работать на платформах Android и iOS.

Связь с бэкэндом - через https-сервисы.

Часть функционала (ввод результатов) должна быть доступна оффлайн.

  • Авторизация
  • Фестивали
  • Участники
  • Ввод результатов
  • Аренда снаряжения
  • Запись на трансфер

Пользователь при первом запуске приложения авторизуется, указывая свою электронную почту.

Приложение отправляет введенную почту в бэкэнд и получает ответ - существует такой пользователь или нет. Если не существует (ранее он не был зарегистрирован) - ему отображается введенный адрес (для проверки правильности) и предлагается получить письмо для подтверждения регистрации; либо скорректировать почту. Если пользователь подтверждает отправку письма - приложение передает в бэкэнд команду на отправку письма с одноразовым кодом.

На следующем шаге пользователь вводит полученный в почту код в приложение. Приложение отправляет код в бэкэнд и получает ответ - верный код или нет. Если верный - авторизация пройдена, приложение получает с бэкэнда токен авторизации (строка) и сохраняет его для последующих запросов. Если код неверен - пользователю предлагается ввести код заново либо запросить повторную отправку письма.

Во всех последующих запросах приложение отправляет в бэкэнд токен авторизации. Если на запрос бэкэнд отвечает ошибкой авторизации, приложение начинает авторизацию заново.

При входе в раздел приложение получает с сервера актуальный список фестивалей:

  • наименование;
  • даты проведения;
  • дата начала (для сортировки списка).

Пользователь может выбрать один фестиваль в качестве текущего. При выборе фестиваля приложение получает с сервера детальную информацию по нему:

  • краткое описание;
  • список зачетов;
  • список классов;
  • список пакетов;
  • список вопросов анкеты;
  • список вариантов скидки.

При открытии списка участников приложение получает с сервера актуальный список участников текущего фестиваля, заявленных в текущем аккаунте:

  1. фамилия, имя, отчество;
  2. дата рождения;
  3. регион (список запрашивается с сервера);
  4. зачет;
  5. класс;
  6. пакет;
  7. вариант скидки;
  8. выбранные сеты для участия (до 5);
  9. статус оплаты взноса;
  10. статус допуска участника.

В списке участников данного пользователя отображаются:

  1. фамилия и имя;
  2. статус оплаты;
  3. статус допуска.

Первая часть формы

Пользователь указывает:

  1. фамилию;
  2. имя;
  3. отчество (или устанавливает флажок «отчество отсутствует»);
  4. пол;
  5. дату рождения;
  6. регион;
  7. (опционально) город (если указано в реквизитах фестиваля);
  8. (опционально) телефон (если указано в реквизитах фестиваля);
  9. (опционально) дополнительный вопрос (ответ - один из вариантов по списку).

Все поля обязательны для заполнения. После полного ввода данные отправляются на сервер. На основе полученных данных сервер возвращает:

  1. сообщение об ошибке, если для пользователя не удалось определить зачет (например, участник не подходит по возрастным ограничениям); в таком случае сообщение выводится пользователю, он должен что-то изменить в данных для повторной отправки;
  2. определенный для участника зачет и (опционально) класс, а также (опционально) вариант скидки; в этом случае пользователю отображается вторая часть формы регистрации.

Вторая часть формы

Пользователю отображается вторая часть формы регистрации:

  1. пакет (выбор из списка);
  2. (опционально) промокод (если указано в реквизитах фестиваля); если пользователь вводит промокод и нажимает кнопку Проверить, промокод отправляется на сервер для проверки; сервер возвращает:
    1. отказ, если промокод не принят; пользователю отображается сообщение, он может скорректировать ошибочный код и отправить заново;
    2. вариант скидки и размер взноса с учетом скидки, если промокод принят.
  3. от 0 до 5 полей выбора сета (указано в реквизитах фестиваля); для заполнения поля пользователю отображается список сетов (название и количество свободных мест), получаемый с сервера перед выбором; пользователь может выбрать только сет с наличием свободных мест;
  4. от 0 до N вопросов анкеты к фестивалю (вопрос может быть обязательный; варианты ответа: строка, одно значение из списка, несколько значений из списка);
  5. (опционально) поле для создания семьи;
  6. (опционально) поле для присоединения к ранее созданной семье по паролю;
  7. (опционально) поле для создания клуба;
  8. (опционально) поле для присоединения к ранее созданному клубу по паролю;
  9. флажок согласия с офертой организатора (с отображением гиперссылки на документ);
  10. (опционально) флажок согласия на обработку ПДн (с отображением гиперссылки на документ).

Если после определения зачета пользователь меняет дату рождения, то процедура определения зачета запускается заново.

Если была определена скидка, то пользователь не может редактировать ФИО и дату рождения.

При изменении пакета расчет стоимости запускается заново.

В зависимости от реквизитов фестиваля перед оплатой может быть обязательным выбор хотя бы одного сета.

После заполнения всех обязательных полей и флажков согласия пользователю становится доступна кнопка отправки участника на регистрацию. Данные отправляются на сервер, сервер возвращает:

  1. отказ с сообщением об ошибке, если участника сохранить не удалось;
  2. обновленный список участников данного пользователя, если регистрация удачна.

Если регистрация удачна и есть сумма к оплате (исключения: пакет с нулевой стоимостью или определилась 100% скидка), пользователю отображается предложение перейти к оплате. При его согласии приложение запрашивает на сервере ссылку на платежную форму для данного участника и открывает ее в браузере.

Пользователь может скорректировать данные ранее заявленного участника:

  1. если участник оплачен: выбранные сеты (из актуального списка со свободными местами), кроме сетов, время начала которых уже прошло;
  2. если не оплачен:
    1. выбранные сеты (из актуального списка со свободными местами);
    2. дату рождения (с повторным определением зачета);
    3. ФИО (если не определена скидка);
    4. (опционально) промокод (с пересчетом суммы);
  3. независимо от оплаты:
    1. регион;
    2. (опционально) город;
    3. (опционально) телефон.

При сохранении участника данные отправляются на сервере, сервер возвращает:

  1. отказ со сообщением об ошибке; в этом случае пользователь может продолжить редактирование;
  2. успех; если есть сумма к оплате, пользователю предлагается перейти к оплате.

Этот раздел должен работать при отсутствии Интернета (оффлайн). Для обеспечения этого при каждом открытии приложения (а также при смене текущего фестиваля) оно:

  1. проверяет наличие Интернета, при его отсутствии выводит предупреждение о работе оффлайн (дальнейшие действия пропускаются);
  2. обновляет с сервера список участников текущего фестиваля данного пользователя;
  3. обновляет с сервера список трасс для каждого участника.

При открытии раздела отображается ранее загруженный список трасс, доступный текущему участнику. Если текущий участник не выбран - пользователь выбирает его из списка своих допущенных участников.

Список трасс - с иерархическими папками (до 3 уровней вложенности), по каждой трассе отображается:

  1. название;
  2. тип (трудность, боулдеринг, мультипитч);
  3. категория;
  4. статус прохождения текущим участником.

При выборе трассы открывается ее карточка для внесения результата:

  1. (информационно) название;
  2. (информационно) тип;
  3. (информационно) категория;
  4. статус прохождения - варианты выбора в зависимости от реквизитов трассы: нет/TOP; нет/зона/TOP; нет/зона/TOP/Flash;
  5. (для типа «мультипитч») флажок «лез вторым»;
  6. (для типов «трудность» и «мультипитч») флажок «ИТО/был срыв».

Пользователь может внести/изменить результат и нажать Сохранить.

  • Последнее изменение: 7 дн. назад
  • Артемий Трушин