appKODE / trainee-test-ios

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Привет!

Это тестовое задание на стажировку в KODE. Стажировка уже закончилась, но сделать приложение в качестве практики для своего GitHub всё ещё можно.

Если хочешь, чтобы задание прошло ревью, то пиши @ekaterina_sergeeva1_en. Обычно мы даём ответ в течение 2 недель, но срок может увеличиться, если заявок будет много. Мы проверим задание и при возможности дадим краткий фидбэк, а если задание выполнено достаточно хорошо, то пригласим на интервью:)

Удачи!

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

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

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

  1. Первое, что нужно сделать - это прочитать и разобраться во всех требованиях, дизайне и api, указанных в этом документе;
  2. Затем - разбить проект на отдельные задачи, т.е. продекомпозировать;
  3. После этого дать временную оценку в часах каждой задаче. Если ожидаемое тобой время выполнения отдельной задачи превышает 2 часа - значит, нужно эту задачу разбить на подзадачи и оценить каждую из них. В итоге у тебя должен получиться план работ и ожидаемое время выполнения всего тестового задания;
  4. После планирования можно переходить к программированию. Создай новый репозиторий в GitHub, сделай его приватным (после старта стажировки можно будет его сделать публичным) и добавь в collaborators пользователя kode-ios;
  5. В первом commit в репозиторий в файле readme.md зафиксируй свой план задач с ожидаемой временной оценкой из пункта 3;
  6. Двигаясь по собственному плану, реализуй тестовое задание;
  7. По завершении работ добавь в readme.md реальное время выполнение задач и напиши в телеграм о готовности @ekaterina_sergeeva1_en, чтобы задание начали проверять.

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

  • на полноту реализованного функционала и соответствие дизайну;
  • количество ошибок;
  • стиль и оформление кода;
  • работу с git - оформление commits, pull requests;
  • декомпозицию и оценку - то есть на твоё умение разбивать задачи и планировать собственное время;
  • на что-то ещё :)

Требования

Стэк

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

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

Дизайн

Хороший дизайн для клиентского разработчика - отличный способ быстро понять, что предстоит сделать. Он у нас именно такой:

https://www.figma.com/file/GRRKONipVClULsfdCAuVs1/KODE-Trainee-Dev-Осень'21?node-id=0%3A1

API

Спецификация метода API (он у нас один) - https://kode-education.stoplight.io/docs/trainee-test/b3A6MjUxNDM5Mjg-get-users

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

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

Запрос для тестирования на разных данных (генерируется автоматически при каждом запросе):

curl --request GET \
  --url https://stoplight.io/mocks/kode-education/trainee-test/25143926/users \
  --header 'Content-Type: application/json' \
  --header 'Prefer: code=200, dynamic=true'

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

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

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

Запуск

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

При входе в приложение необходимо отобразить экран 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 должен закрываться, а список на главной странице должен быть обновлен.

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

В случае отсутствия результатов поиска необходимо отобразить информацию о том, что ничего не было найдено. Экран "2.0.0Г Люди (Ошибка поиска)".

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

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

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

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

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

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

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

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

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

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

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

Если при загрузке списка людей произошла ошибка, необходимо показать уведомление с текстом ошибки - экран "2.0.0.А – Люди (Ошибка)". Существует несколько видов ошибок:

  • Отсутствует интернет соединение. В этом случае в уведомлении должен отображаться текст "Не могу обновить данные. Проверь соединение с интернетом."
  • Ошибка API. В этом случае в уведомлении должен быть отображен текст "Не могу обновить данные. Что-то пошло не так".

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

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

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

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

About