Это старая версия документа!
Концептуальное техническое задание
Мобильное приложение «Фестивали скалолазания» предназначено для регистрации участников на фестивали и самостоятельного ввода результатов.
Должно работать на платформах Android и iOS.
Связь с бэкэндом - через https-сервисы.
Часть функционала (ввод результатов) должна быть доступна оффлайн.
Разделы
- Авторизация
- Фестивали
- Участники
- Ввод результатов
- Аренда снаряжения
- Запись на трансфер
Авторизация
Пользователь при первом запуске приложения авторизуется, указывая свою электронную почту.
Приложение отправляет введенную почту в бэкэнд и получает ответ - существует такой пользователь или нет. Если не существует (ранее он не был зарегистрирован) - ему отображается введенный адрес (для проверки правильности) и предлагается получить письмо для подтверждения регистрации; либо скорректировать почту. Если пользователь подтверждает отправку письма - приложение передает в бэкэнд команду на отправку письма с одноразовым кодом.
На следующем шаге пользователь вводит полученный в почту код в приложение. Приложение отправляет код в бэкэнд и получает ответ - верный код или нет. Если верный - авторизация пройдена, приложение получает с бэкэнда токен авторизации (строка) и сохраняет его для последующих запросов. Если код неверен - пользователю предлагается ввести код заново либо запросить повторную отправку письма.
Во всех последующих запросах приложение отправляет в бэкэнд токен авторизации. Если на запрос бэкэнд отвечает ошибкой авторизации, приложение начинает авторизацию заново.
Фестивали
При входе в раздел приложение получает с сервера актуальный список фестивалей:
- наименование;
- даты проведения;
- дата начала (для сортировки списка).
Пользователь может выбрать один фестиваль в качестве текущего. При выборе фестиваля приложение получает с сервера детальную информацию по нему:
- краткое описание;
- список зачетов;
- список классов;
- список пакетов;
- список вопросов анкеты;
- список вариантов скидки.
Участники
При открытии списка участников приложение получает с сервера актуальный список участников текущего фестиваля, заявленных в текущем аккаунте:
- фамилия, имя, отчество;
- дата рождения;
- регион (список запрашивается с сервера);
- зачет;
- класс;
- пакет;
- вариант скидки;
- выбранные сеты для участия (до 5);
- статус оплаты взноса.
В списке участников данного пользователя отображаются:
- фамилия и имя;
- статус оплаты.
Добавление нового участника
Первая часть формы
Пользователь указывает:
- фамилию;
- имя;
- отчество (или устанавливает флажок «отчество отсутствует»);
- пол;
- дату рождения;
- регион;
- (опционально) город (если указано в реквизитах фестиваля);
- (опционально) телефон (если указано в реквизитах фестиваля);
- (опционально) дополнительный вопрос (ответ - один из вариантов по списку).
Все поля обязательны для заполнения. После полного ввода данные отправляются на сервер. На основе полученных данных сервер возвращает:
- сообщение об ошибке, если для пользователя не удалось определить зачет (например, участник не подходит по возрастным ограничениям); в таком случае сообщение выводится пользователю, он должен что-то изменить в данных для повторной отправки;
- определенный для участника зачет и (опционально) класс, а также (опционально) вариант скидки; в этом случае пользователю отображается вторая часть формы регистрации.
Вторая часть формы
Пользователю отображается вторая часть формы регистрации:
- пакет (выбор из списка);
- (опционально) промокод (если указано в реквизитах фестиваля); если пользователь вводит промокод и нажимает кнопку Проверить, промокод отправляется на сервер для проверки; сервер возвращает:
- отказ, если промокод не принят; пользователю отображается сообщение, он может скорректировать ошибочный код и отправить заново;
- вариант скидки и размер взноса с учетом скидки, если промокод принят.
- от 0 до 5 полей выбора сета (указано в реквизитах фестиваля); для заполнения поля пользователю отображается список сетов (название и количество свободных мест), получаемый с сервера перед выбором; пользователь может выбрать только сет с наличием свободных мест;
- от 0 до N вопросов анкеты к фестивалю (вопрос может быть обязательный; варианты ответа: строка, одно значение из списка, несколько значений из списка);
- (опционально) поле для создания семьи;
- (опционально) поле для присоединения к ранее созданной семье по паролю;
- (опционально) поле для создания клуба;
- (опционально) поле для присоединения к ранее созданному клубу по паролю;
- флажок согласия с офертой организатора (с отображением гиперссылки на документ);
- (опционально) флажок согласия на обработку ПДн (с отображением гиперссылки на документ).
Если после определения зачета пользователь меняет дату рождения, то процедура определения зачета запускается заново.
Если была определена скидка, то пользователь не может редактировать ФИО и дату рождения.
При изменении пакета расчет стоимости запускается заново.
В зависимости от реквизитов фестиваля перед оплатой может быть обязательным выбор хотя бы одного сета.
После заполнения всех обязательных полей и флажков согласия пользователю становится доступна кнопка отправки участника на регистрацию. Данные отправляются на сервер, сервер возвращает:
- отказ с сообщением об ошибке, если участника сохранить не удалось;
- обновленный список участников данного пользователя, если регистрация удачна.
Если регистрация удачна и есть сумма к оплате (исключения: пакет с нулевой стоимостью или определилась 100% скидка), пользователю отображается предложение перейти к оплате. При его согласии приложение запрашивает на сервере ссылку на платежную форму для данного участника и открывает ее в браузере.
Редактирование участника
Пользователь может скорректировать данные ранее заявленного участника:
- если участник оплачен: выбранные сеты (из актуального списка со свободными местами), кроме сетов, время начала которых уже прошло;
- если не оплачен:
- выбранные сеты (из актуального списка со свободными местами);
- дату рождения (с повторным определением зачета);
- ФИО (если не определена скидка);
- (опционально) промокод (с пересчетом суммы);
- независимо от оплаты:
- регион;
- (опционально) город;
- (опционально) телефон.
При сохранении участника данные отправляются на сервере, сервер возвращает:
- отказ со сообщением об ошибке; в этом случае пользователь может продолжить редактирование;
- успех; если есть сумма к оплате, пользователю предлагается перейти к оплате.