Files
Test_NTO-2025-Client-Android/README.md

67 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# НТО 2025. II отборочный этап. Индивдуальное задание — Android
## 📖 Предыстория
В компании S есть возможность бронирования мест в пространствах, предназначенных под общее использование (open-space). На данный момент для бронирования места используются различные способы бронирования, разработанные в каждом офисе индивидуально.
Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра забронированных мест.
## 📋 Системные требования
| **Параметр** | **Требование** |
|-----------------------------|---------------------------------------|
| **Минимальная версия Android** | 9.0 (API 28) |
| **Целевая версия Android** | 16 (API 36) |
| **Поддерживаемые устройства** | смартфоны, планшеты |
| **Ориентация экранов** | портретная |
| **Языки** | русский |
## 📱 Техническое задание
Тебе предстоит доработать существующий проект, в котором уже реализован UI слой. Над этим проектом уже работал твой коллега, однако он ушел в отпуск. Твоя цель — описать бизнес-логику приложения, реализовав `domain` и `data` слой. Взаимодействие с сервером необходимо осуществить с помощью REST API.
Поскольку проект только на начальной стадии развития и сервер ещё не был опубликован на внешнем ресурсе, тебе предстоит развернуть его локально. Ссылка на репозиторий с [бэкендом](https://git.sicampus.ru/Olympic/NTO-2025-Client-Android-backend). Рекомендуется открывать в IntelijIDEA.
Отметим, что при доработке проекта ui слой и доменные сущности изменять не нужно.
### 1. Реализация основного запроса
Первая задача - реализовать сетевое взаимодействие для получения информации о пользователе и его существующих бронированиях. Для этого используется `GET /user`. Формат данных, возвращаемых сервером, можно посмотреть, запустив сервер и выполнив запрос к эндпоинту `/user`. Текущий проект уже содержит необходимую вёрстку и доменные модели, поля которых необходимо заполнить данными из ответа сервера в полном соответствии со структурой API.
### 2. Заполнение формы ввода
Далее тебе необходимо доработать форму отправки данных и реализовать обработку ответов от сервера. Для этого требуется добавить сетевой запрос `POST /book`, который отправляет данные в формате `multipart/form-data`. В теле запроса передаются поля `room` и `time`, содержащие информацию о бронировании. В рамках данного MVP реализация валидации или фильтрации вводимых данных на стороне клиента не требуется.
### 3. Обработка ошибок
Заключительным этапом разработки приложения является анализ и обработка ответов сервера. Необходимо доработать существующие сетевые запросы следующим образом:
- если код статуса ответа равен 2xx, то необходимо считать тело ответа и вернуть полученные данные;
- если код статуса ответа не равен 2xx, то необходимо считать тело ответа, содержащее информацию об ошибке, извлечь из него сообщение и на уровне доменной модели вернуть `Result.Failure` (как выполнить мапинг - решаешь ты, в т.ч. можно использовать конструкцию `runCatching { … }`), у которого это сообщение передаётся в свойство message для дальнейшего отображения в интерфейсе.
Для тестирования можете модифицровать тестовый сервер, все необхоидмые сущности для этого уже созданы.
## ✅ Особенности оценивания
Оценивание происходит с помощью автоматической системы тестирования, которая самостоятельно находит элементы и взаимодействует с ними (именно для этого у каждого элемента указан уникальный идентификатор, по которому будет производится поиск). Каждый тест происходит с чистой установки приложения.
**Неизменяемые файлы**
Классы, отмеченные строкой:
```kotlin
// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ СОСТОЯНИЕ
```
Во время тестирования они будут возвращены в состояние, которое указано в шаблоне. Поэтому их редактирование запрещено.
**Зависимости**
Все необходимые зависимости проекта уже подключены. Тебе запрещено добавлять/изменять/удалять зависимости. Они будут возвращены в исходное состояние.
**Указание адреса сервера**
При подключении библиотеки для сетевых запросов обязательно host сервера используйте из файла `Constants.kt`. При тестировании данный файл будет изменён таким образом, чтобы у приложения была возможность подключиться и работать корректно с тестирующим сервером.