Merge remote-tracking branch 'origin/main'
This commit is contained in:
		
						commit
						e2f43cb936
					
				
							
								
								
									
										114
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								README.md
									
									
									
									
									
								
							| @ -1,6 +1,5 @@ | |||||||
| [](https://sicampus.ru/gitea/core/docs/src/branch/main/how-upload-project.md) |  | ||||||
| 
 | 
 | ||||||
| # НТО 2024. II отборочный этап. Командные задани — клиентская часть | # НТО 2024-2025. Финал. Командные задани — клиентская часть | ||||||
| 
 | 
 | ||||||
| ## 📖 Предыстория | ## 📖 Предыстория | ||||||
| В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных.  | В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных.  | ||||||
| @ -8,114 +7,3 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ## 📋 Системные требования |  | ||||||
| 
 |  | ||||||
| | **Параметр**                | **Требование**                        | |  | ||||||
| |-----------------------------|---------------------------------------| |  | ||||||
| | **Минимальная версия Android** | 9.0 (API 28)                         | |  | ||||||
| | **Целевая версия Android**    | 14 (API 34)                          | |  | ||||||
| | **Поддерживаемые устройства** | смартфоны, планшеты                  | |  | ||||||
| | **Ориентация экранов**         | портретная                           | |  | ||||||
| | **Языки**                    | русский, английский                  | |  | ||||||
| | **Разрешения**               | доступ к интернету, камера (при необходимости) | |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## 📱 Техническое задание |  | ||||||
| Требуется разработать нативное мобильное приложение, которое будет содержать следующие экраны. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ### 1. Экран авторизации |  | ||||||
| 
 |  | ||||||
| > Данный экран должен быть показан при первом входе в приложение, а также в ситуациях, когда пользователь не зарегистрировался в приложении. |  | ||||||
| 
 |  | ||||||
| #### Элементы, которые должны присутствовать на экране: |  | ||||||
| - Поле ввода (`id/username`), в котором пользователю необходимо ввести свой логин. |  | ||||||
| - Кнопка входа (`id/login`), по нажатию на которую пользователь авторизуется в системе. |  | ||||||
| - По умолчанию скрытое (`GONE`) текстовое поле с ошибкой (`id/error`). |  | ||||||
| 
 |  | ||||||
| #### Требования к компонентам: |  | ||||||
| 1. В пустом поле ввода должна отображаться подсказка, что требуется ввести пользователю. |  | ||||||
| 2. Если хотя бы одно из условий ниже соблюдено - кнопка должна быть неактивной: |  | ||||||
|    - Поле ввода пустое. |  | ||||||
|    - Количество символов менее 3х. |  | ||||||
|    - Логин начинается с цифры. |  | ||||||
|    - Логин содержит символы, отличные от латинского алфавита и цифр. |  | ||||||
| 3. Поле ввода и кнопку должно быть видно при раскрытии клавиатуры. |  | ||||||
| 4. - При нажатии на кнопку входа необходимо проверить, что данный пользователь существует с помощью запроса `api/<LOGIN>/auth` (подробное описание представлено в техническом задании серверной части). |  | ||||||
| 5. В случае отсутствия логина или любой другой неполадки - необходимо вывести ошибку, пока пользователь не изменит текстовое поле или повторно не нажмёт на кнопку. |  | ||||||
| 6. После нажатия на кнопку - логин должен быть сохранён и при следующем открытии приложения экран авторизации не должен быть показан. |  | ||||||
| 7. После нажатия на кнопку - при нажатии стрелки назад - экран авторизации не должен быть показан повторно. |  | ||||||
| 8. Экран авторизации показывается только в случае, если пользователь неавторизован. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ### 2. Главный экран |  | ||||||
| 
 |  | ||||||
| > Данный экран содержит общую информацию о пользователе: |  | ||||||
| >- ФИО |  | ||||||
| >- Фото |  | ||||||
| >- Должность |  | ||||||
| >- Время последнего входа |  | ||||||
| 
 |  | ||||||
| #### Элементы, которые должны присутствовать на экране: |  | ||||||
| - Текстовое поле (`id/fullname`), в котором написано имя пользователя. |  | ||||||
| - Изображение (`id/photo`), на котором отображено фото пользователя. |  | ||||||
| - Текстовое поле (`id/position`), в котором написана должность пользователя. |  | ||||||
| - Текстовое поле (`id/lastEntry`), в котором написана дата и время последнего входа пользователя. |  | ||||||
| - Кнопка (`id/logout`) для выхода пользователя из аккаунта. |  | ||||||
| - Кнопка (`id/refresh`) для обновления данных. |  | ||||||
| - Кнопка (`id/scan`) для сканирования QR кода. |  | ||||||
| - По умолчанию скрытое текстовое поле с ошибкой (`id/error`). |  | ||||||
| 
 |  | ||||||
| #### Требования к компонентам: |  | ||||||
| - В случае любой ошибки необходимо скрыть все элементы, кроме текстового поля с ошибкой и кнопки обновления данных. |  | ||||||
| - Для получения данных необходимо использовать сетевой запрос `/api/<LOGIN>/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/<LOGIN>/open`, добавив данные из результата и получить ответ. |  | ||||||
| - Если сервер ответил успешно - то отображаем текст:   |  | ||||||
|   *"Успешно/Success"* |  | ||||||
| - Если сервер ответил любой ошибкой - то отображаем текст:   |  | ||||||
|   *"Что-то пошло не так/Something wrong"* |  | ||||||
| - Кнопка закрытия всегда открывает главный экран. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## 🛠 Решение |  | ||||||
| 
 |  | ||||||
| Необходимо загрузить свое решение в систему [по ссылке](https://innovationcampus.ru/lms/mod/quiz/view.php?id=2149). |  | ||||||
| 
 |  | ||||||
| Отметим, что работу необходимо осуществлять в представленных проектах-заготовках (шаблонах).  |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## ✅ Особенности оценивания |  | ||||||
| 
 |  | ||||||
| Оценивание происходит с помощью автоматической системы тестирования, которая в автоматическом режиме находит элементы и взаимодействует с ними (именно для этого у каждого элемента указан уникальный идентификатор, по которому будет производится поиск). Каждый тест происходит с чистой установки приложения. |  | ||||||
| В случае тестирования сервера на него поочередно отправляются команды, описанные в API и ожидаются определенные корректные ответы. |  | ||||||
| Сервер и приложение тестируются независимо. |  | ||||||
| 
 |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user