Skip to content

appKODE/trainee-test-ios-2024

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

Привет!

Это тестовое задание на стажировку в KODE.

Во-первых, поздравляем! Ты выбрал для начала своей карьеры, пожалуй, самый эффективный и увлекательный старт - стажировку в нашей компании.

Во-вторых, приготовься к тому, что будет непросто - мы разработчики, а не университетские преподаватели. Времени на раскачку не будет, а обучение на стажировке максимально приближено к реальной работе :)

В-третьих, надо сделать тестовое задание, чтобы попасть на стажировку. Нам это нужно для того, чтобы понять, что ты уже немного умеешь программировать и сможешь справиться с тем материалом, который мы будем давать в процессе стажировки.

Удачи!

Что нужно сделать?

В качестве тестового задания мы предлагаем тебе реализовать небольшое приложение, в котором есть всего по чуть-чуть: вёрстки, работы с API, преобразований данных и т.д.

Какие требования к процессу и результату?

  1. Первое, что нужно сделать - это прочитать и разобраться во всех требованиях, дизайне и API, указанных в этом документе;
  2. Затем - разбить проект на отдельные задачи, т.е. продекомпозировать;
  3. После этого дать временную оценку в часах каждой задаче. Если ожидаемое тобой время выполнения отдельной задачи превышает 2 часа - значит, нужно эту задачу разбить на подзадачи и оценить каждую из них. В итоге у тебя должен получиться план работ и ожидаемое время выполнения всего тестового задания;
  4. После планирования можно переходить к программированию. Создай новый репозиторий в GitHub, сделай его приватным (после старта стажировки можно будет его сделать публичным)
  5. В репозитории создай файл README.md и зафиксируй в нём свой план задач с ожидаемой временной оценкой из пункта 3;
  6. Двигаясь по собственному плану, реализуй тестовое задание;
  7. По завершении работ добавь в README.md реальное время выполнение задач
  8. Добавь в Collaborators пользователя kode-ios и отправь ссылку на свой GitHub к нам в бот https://t.me/KODE_Internship_2024_Bot

Сколько есть времени?

Тестовые задания принимаются до 22 марта 2024.

На что мы будем смотреть? На все сразу:

  • полнота реализованного функционала;
  • соответствие макетам в Figma;
  • количество ошибок;
  • стиль и оформление кода;
  • гибкость сетевой части;
  • работа с git - оформление коммитов, наличие веток и Pull Request'ов;
  • декомпозиция и оценка - то есть на твоё умение разбивать задачи и планировать собственное время;

Требования

Стэк

  • Swift 5
  • UIKit
  • iOS 15+
  • Зависимости через Cocoapods или SPM

Библиотеки использовать можно свободно на своё усмотрение, но будет круче, если сделать всё самостоятельно.

Дизайн

Макеты, на которые нужно ориентироваться – тут.

API

Спецификация метода API (он у нас один) - здесь

Запрос для получения успешного ответа:

curl --request GET \
  --url https://stoplight.io/mocks/kode-api/trainee-test/331141861/users \
  --header 'Content-Type: application/json' \
  --header 'Prefer: code=200, example=success'

Запрос, который вернет ошибку с HTTP-статусом 500:

curl --request GET \
  --url https://stoplight.io/mocks/kode-api/trainee-test/331141861/users \
  --header 'Content-Type: application/json' \
  --header 'Prefer: code=500, example=error-500'

Обратите внимание на заголовки Prefer – с их помощью можно манипулровать ответом.

Функциональные требования

Запуск

Когда пользователь открывает приложение, необходимо загрузить актуальный список работников компании.

При входе в приложение необходимо отобразить экран 2.0.0.

При этом изначально, при первой загрузке данных, он должен быть в состоянии 1.0.0.

Если же при загрузке данных произошла ошибка (отсутствует интернет-соединение или API вернул ошибку, например), необходимо отобразить экран в состоянии "Критическая ошибка".

А в случае успеха, понятное дело, отображаем список людей.

Навигация

Компонент навигации находится в верхней части экрана и содержит поле поиска, кнопку сортировки и панель вкладок. В списке на главном экране должны быть работники департамента, соответствующего выбранной вкладке, либо вообще все сотрудники, если выбрана вкладка "Все".

Соответствия названия вкладок с полем "department" из запроса API:

  • android - Android
  • ios - iOS
  • design - Дизайн
  • management - Менеджмент
  • qa - QA
  • back_office - Бэк-офис
  • frontend - Frontend
  • hr - HR
  • pr - PR
  • backend - Backend
  • support - Техподдержка
  • analytics - Аналитика

При нажатии на кнопку "Фильтр" открывается Bottom Sheet с вариантами сортировки списка работников. Есть два варианта сортировки: "По алфавиту" (по умолчанию) и "По дню рождения". При переключении варианта сортировки Bottom Sheet закрывается, а список на главной странице обновляется (на время запроса снова показываем состояние 1.0.0).

Когда пользователь вводит текст в поле поиска, необходимо локально фильтровать список и отображать только работников, соответствующих параметрам поиска. Поиск может осуществляться по имени, фамилии или никнейму, состоящему из двух символов.

В случае отсутствия результатов поиска необходимо отобразить информацию о том, что ничего не было найдено – состояние 2.0.2Г.

Список работников

В режиме сортировки "По алфавиту" для каждого работника отображается его фотография, имя, никнейм и департамент. Пока фотография не загрузилась, вместо неё отображается картинка-заглушка.

В режиме сортировки "По дню рождения" список отображается от ближайшей даты для рождения вниз. Если день рождения следующего работника будет только в следующем году, то необходимо отобразить блок с годом – состояние 2.0.1А.

При тапе на сотрудника нужно открыть экран информации о нём.

Пользователь должен иметь возможность перезагрузить список людей жестом pull-to-refresh. Если в процессе обновления произошла ошибка, необходимо ее игнорировать. Если данные загрузились успешно, необходимо обновить список на главном экране. При этом параметры поиска и сортировки, если они были выставлены ранее, должны учитываться и не должны быть сброшены.

Экран "детали"

В шапке должны отображаться аватарка пользователя, имя, никнейм и название департамента.

Ниже находятся дата рождения и номер телефона. При нажатии на номер телефона необходимо показать Action Sheet с подтверждением звонка. При нажатии на кнопку с номером телефона должен начаться звонок, а сам Action Sheet закрывается.

Дополнительные задания

Дополнительные задания не обязательны для выполнения. Если вы не успеваете - лучше сделать хорошо основную часть. Но если время осталось...

Отображение ошибки обновления

Если при обновлении списка людей через pull-to-refresh произошла ошибка, нужно показать уведомление с текстом ошибки - состояние 2.0.0.А. Существует несколько видов ошибок:

  • Ошибка сетевого соединения (timeout, HTTP-статус 5xx и т.п.). В этом случае в уведомлении текст "Не могу обновить данные. Проверь соединение с интернетом"
  • Ошибка от сервера (HTTP-статус 4xx) или ошибка при парсинге данных. В этом случае в уведомлении текст "Не могу обновить данные. Что-то пошло не так".

Уведомление закрывает собой статус-бар. Оно должно скрываться спустя 3 секунды само, но его можно также убрать тапом.

Анимированный индикатор pull-to-refresh

Индикатор должен выглядеть так и заполняться по часовой стрелке в зависимости от того, как далеко его вытянул пользователь, а при старте обновления вращаться по кругу (см. пример анимации).

На этом всё, желаем удачи!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published