Files
NTO-2025-Client-Android/README.md
Анастасия Таразевич fa3becb049
Some checks failed
Merge core/template-android-project to this repo / merge-if-needed (push) Has been cancelled
Обновить README.md
2025-11-12 11:37:37 +00:00

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`. При тестировании данный файл будет изменён таким образом, чтобы у приложения была возможность подключиться и работать корректно с тестирующим сервером.