INFO/TASK.md

120 lines
9.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.

# Инженерный тур заключительного этапа
## 📖 Предыстория
В компании S есть возможность бронирования мест в пространствах, предназначенных под общее использование (open-space). На данный момент для бронирования места используются различные способы бронирования, разработанные в каждом офисе индивидуально.
Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра забронированных мест.
## 📑 Системные требования к приложению
- Минимальная версия ОС: Android 9.0 (API 28)
- Целевая версия ОС: Android 16 (API 36)
- Работоспособность приложения для платформ: mobile (смартфоны), tablet (планшеты)
- Поддерживаемая ориентация: portrait (портретная), landscape (альбомная)
- Поддержка языков: русский, английский
- Разрешения: доступ к интернету
### Технический стек для frontend:
- Kotlin
- Ktor
- MVVM/MVI
### Технический стек для backend:
- Java 17
- Spring Boot
- PostgreSQL
- Liquibase
- Docker
- H2
### Технический стек и платформы для дизайнеров:
- PenPot
- Material Design
- Compose
- Auto Layout
- Interactive Prototypes
## 📂 Оцениваемые артефакты работы
- Репозиторий команды клиентской части приложения в Gitea.
- Репозиторий команды серверной части приложения в Gitea.
- Файл доски с макетом клиентской части приложения в разделе Releases репозитория команды на Gitea. Файл должен быть с расширением .penpot.
- Релизный APK-файл приложения в разделе Releases репозитория команды на Gitea.
- FatJar-файл для запуска серверного приложения для заданий: 0, 1 и 2. FatJar-файл необходимо разместить в разделе Releases репозитория команды на Gitea.
На 3-ем задании необходимо добавить Docker-файл для приложения и Docker-compose (с двумя контейнерами: PostgreSQL и само серверное приложение), с помощью которого можно развернуть и запустить серверную часть.
**Важно**: если серверное приложение переведено на PostgreSQL, то наличие Docker-compose обязательно.
Описанные выше артефакты оцениваются на каждом чекпоинте. APK-файл и JAR-файл должны иметь следующее имена: Client_vN.apk и Server_vN.jar, где N — номер Чекпоинта.
## ❗️ Чекпоинты
Чекпоинт — фиксированный момент времени, в который начинается техническая экспертиза решения задания инженерного тура.
Каждый чекпоинт содержит описание функциональности, которую необходимо реализовать участникам.
Расписание чекпоинтов представлено ниже:
**Чекпоинт 0 — 24.02 в 19:00**
**Чекпоинт 1 — 25.02 в 14:00**
**Чекпоинт 2 — 25.02 в 19:00**
**Чекпоинт3 — 26.02 в 14:30**
## 🛠 Техническое задание
Требуется доработать нативное мобильное приложение, выполненное в рамках второго отборочного этапа.
Ссылки на проекты-заготовки:
Клиентская часть: https://gitnto.innovationcampus.ru/NTO-2026/NTO-2026-Android-TeamTask-Template
Серверная часть: https://gitnto.innovationcampus.ru/NTO-2026/NTO-2026-Backend-TeamTask-Template
Верстка приложения должна полностью соответствовать макетам в PenPot. Соответствие макетам является обязательным и оценивается на каждом чекпоинте. В PenPot необходимо отдельно оформить палитру цветов, используемые шрифты и типографику, типы кнопок во всех состояниях, поля ввода во всех состояниях, а также элементы навигации.
Приложение должно поддерживать дневную и ночную темы.
Интерфейс обязан корректно адаптироваться к динамическому изменению ширины экрана и перестраивать компоновку без потери состояния. Состояние экранов и пользовательский ввод должны сохраняться при повороте устройства.
## Задание 0. Развертывание исходных данных (~2 часа)
**Дедлайн сдачи артефактов: 24.02 в 19:00**
Цель: настроить среду для последующей работы.
Необходимо создать форки исходных репозиториев-заготовок в организации вашей команды в Gitea, а затем собрать все необходимые артефакты для оценивания работы.
На доске в PenPot необходимо отдельно оформить палитру цветов, используемые шрифты и типографику (UI Kit).
## Задание 1. Усиливаем безопасность (~3 часа)
**Дедлайн сдачи артефактов: 25.02 в 14:00**
Цель: повысить безопасность системы авторизации, поскольку приложение в будущем будет опубликовано для широкой аудитории.
Требования:
- Заменить текущую систему ввода кода на логин и пароль.
- Имплементировать один из протоколов авторизации (OAuth, CAS или т.п.)
- Новый алгоритм авторизации должен быть поддержан во всем функционале приложения.
- Предусмотреть возможность обработки ошибок во время авторизации, таких как отсутствие интернета у устройства и т.п.
- Предусмотреть все состояния UI: пустые поля, ошибки валидации, ошибка "Неверный логин/пароль", состояние загрузки при запросе к серверу, состояние блокировки после 5 неудачных попыток.
- Хранить авторизационные данные в защищенном хранилище или зашифрованном виде.
- Предотвратить перебор логина и пароля на стороне клиента (уменьшить вредоносный трафик). Перебором считается ввод неверных данных более 5 раз. Добавить визуальную обратную связь пользователю при зафиксированном переборе пароля.
- На уровне ОС ограничить возможность записи экрана и создания скриншотов (при поддержке ОС).
- Доработать UI Kit.
Ограничения:
- Логин должен включать в себя следующий набор символов: .; a-z; A-Z; 0-9;
- Пароль должен:
- состоять не менее чем из 8 символов;
- не повторять один и тот же символ 3 и более раз;
- содержать не менее 1 спецсимвола;
- не содержать в себе 3 и более символа из логина. Например, если логин user, то пароль не может содержать следующий набор символов: use, Use, ser, sEr и тп. Регистр значения не имеет.
Поощряется добавление любых иных мер, усиливающих безопасность учетной записи.
**Для прохождения на код-ревью, в приложение должны выполняться следующие сценарии:**
- Корректная работа без интернета
- Ввод неверных данных
- Успешный вход