From e025e1eff7c70d6943bf5060960566ef2ef40ff4 Mon Sep 17 00:00:00 2001 From: EgorVorobev Date: Wed, 19 Feb 2025 13:29:50 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 122 +----------------------------------------------------- 1 file changed, 1 insertion(+), 121 deletions(-) diff --git a/README.md b/README.md index ef91da2..a792b29 100644 --- a/README.md +++ b/README.md @@ -1,121 +1 @@ -[![Android Studio version](https://img.shields.io/endpoint?url=https%3A%2F%2Fsicampus.ru%2Fgitea%2Fcore%2Fdocs%2Fraw%2Fbranch%2Fmain%2Fandroid-studio-label.json)](https://sicampus.ru/gitea/core/docs/src/branch/main/how-upload-project.md) - -# НТО 2024. II отборочный этап. Командные задани — клиентская часть - -## 📖 Предыстория -В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных. -Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра посещений и работой электронного пропуска как временной замены обычного (при помощи сканировании QR кода, который находится на считывателе). Поскольку в приложении есть возможность использовать телефон как пропуск - то к данному приложению повышенные требования к безопасности всех данных, находящихся внутри него. - - - -## 📋 Системные требования - -| **Параметр** | **Требование** | -|-----------------------------|---------------------------------------| -| **Минимальная версия Android** | 9.0 (API 28) | -| **Целевая версия Android** | 14 (API 34) | -| **Поддерживаемые устройства** | смартфоны, планшеты | -| **Ориентация экранов** | портретная | -| **Языки** | русский, английский | -| **Разрешения** | доступ к интернету, камера (при необходимости) | - - - -## 📱 Техническое задание -Требуется разработать нативное мобильное приложение, которое будет содержать следующие экраны. - - -### 1. Экран авторизации - -> Данный экран должен быть показан при первом входе в приложение, а также в ситуациях, когда пользователь не зарегистрировался в приложении. - -#### Элементы, которые должны присутствовать на экране: -- Поле ввода (`id/username`), в котором пользователю необходимо ввести свой логин. -- Кнопка входа (`id/login`), по нажатию на которую пользователь авторизуется в системе. -- По умолчанию скрытое (`GONE`) текстовое поле с ошибкой (`id/error`). - -#### Требования к компонентам: -1. В пустом поле ввода должна отображаться подсказка, что требуется ввести пользователю. -2. Если хотя бы одно из условий ниже соблюдено - кнопка должна быть неактивной: - - Поле ввода пустое. - - Количество символов менее 3х. - - Логин начинается с цифры. - - Логин содержит символы, отличные от латинского алфавита и цифр. -3. Поле ввода и кнопку должно быть видно при раскрытии клавиатуры. -4. - При нажатии на кнопку входа необходимо проверить, что данный пользователь существует с помощью запроса `api//auth` (подробное описание представлено в техническом задании серверной части). -5. В случае отсутствия логина или любой другой неполадки - необходимо вывести ошибку, пока пользователь не изменит текстовое поле или повторно не нажмёт на кнопку. -6. После нажатия на кнопку - логин должен быть сохранён и при следующем открытии приложения экран авторизации не должен быть показан. -7. После нажатия на кнопку - при нажатии стрелки назад - экран авторизации не должен быть показан повторно. -8. Экран авторизации показывается только в случае, если пользователь неавторизован. - - - - -### 2. Главный экран - -> Данный экран содержит общую информацию о пользователе: ->- ФИО ->- Фото ->- Должность ->- Время последнего входа - -#### Элементы, которые должны присутствовать на экране: -- Текстовое поле (`id/fullname`), в котором написано имя пользователя. -- Изображение (`id/photo`), на котором отображено фото пользователя. -- Текстовое поле (`id/position`), в котором написана должность пользователя. -- Текстовое поле (`id/lastEntry`), в котором написана дата и время последнего входа пользователя. -- Кнопка (`id/logout`) для выхода пользователя из аккаунта. -- Кнопка (`id/refresh`) для обновления данных. -- Кнопка (`id/scan`) для сканирования QR кода. -- По умолчанию скрытое текстовое поле с ошибкой (`id/error`). - -#### Требования к компонентам: -- В случае любой ошибки необходимо скрыть все элементы, кроме текстового поля с ошибкой и кнопки обновления данных. -- Для получения данных необходимо использовать сетевой запрос `/api//info`. -- Формат даты и времени последнего входа пользователя: `yyyy-MM-dd HH:mm` (например: 2024-02-31 08:31). Время необходимо отображать с сервера, без поправок на часовой пояс или локальное смещение. -- При нажатии на кнопку выход все данные (если есть) пользователя должны быть очищены, а приложение должно открыть экран авторизации. -- При нажатии кнопки сканирования необходимо открыть экран сканирования QR кода. -- При нажатии на кнопку обновления данных - необходимо повторно вызывать сетевой запрос для получения актуальных данных. - - - -### 3. Экран сканирования QR-кода - -> Данный экран позволяет отсканировать код на турникете и войти с помощью смартфона. В данном случае данный экран будет уже написан и представлен dам в готовом виде в заготовке. Вам необходимо только подписаться на его результат с помощью **Result API** и обработать считанные данные из QR кода. **Данный экран нельзя модифицировать. Он поставляется как есть.** - - - -### 4. Экран с результатом сканирования QR кода - -> На данном экране необходимо вывести успешность или неуспешность входа с помощью метода QR кода. - -#### Элементы, которые должны присутствовать на экране: -- Текстовое поле (`id/result`), где содержится текст об успешности или неуспешности входа. -- Кнопка (`id/close`) для закрытия данного экрана. - -#### Требования к компонентам: -- В случае, если результат пришёл пустым или со статусом “Отмена” - необходимо вывести пользователю текст: - *"Вход был отменён/Operation was cancelled"* -- В случае, если данные пришли, то необходимо их отправить на сервер с запросом `api//open`, добавив данные из результата и получить ответ. -- Если сервер ответил успешно - то отображаем текст: - *"Успешно/Success"* -- Если сервер ответил любой ошибкой - то отображаем текст: - *"Что-то пошло не так/Something wrong"* -- Кнопка закрытия всегда открывает главный экран. - - - -## 🛠 Решение - -Необходимо загрузить свое решение в систему [по ссылке](https://innovationcampus.ru/lms/mod/quiz/view.php?id=2149). - -Отметим, что работу необходимо осуществлять в представленных проектах-заготовках (шаблонах). - - - -## ✅ Особенности оценивания - -Оценивание происходит с помощью автоматической системы тестирования, которая в автоматическом режиме находит элементы и взаимодействует с ними (именно для этого у каждого элемента указан уникальный идентификатор, по которому будет производится поиск). Каждый тест происходит с чистой установки приложения. -В случае тестирования сервера на него поочередно отправляются команды, описанные в API и ожидаются определенные корректные ответы. -Сервер и приложение тестируются независимо. - +Figma: https://www.figma.com/design/v9YlfUjxz6ChHS5mNWSQPN/TheDevs_Final?node-id=2-3&t=Hnk1mGCVo7joisAC-1 \ No newline at end of file