{"id":24968437,"url":"https://github.com/alinkaqa/yandex.scooter","last_synced_at":"2025-03-29T03:24:48.227Z","repository":{"id":273757624,"uuid":"920783026","full_name":"AlinkaQA/Yandex.Scooter","owner":"AlinkaQA","description":"Тестирование веб-сайта, мобильного приложения и API","archived":false,"fork":false,"pushed_at":"2025-01-23T15:33:21.000Z","size":89,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T13:18:42.733Z","etag":null,"topics":["android-studio","charles","postman"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlinkaQA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-22T19:05:02.000Z","updated_at":"2025-01-23T15:36:23.000Z","dependencies_parsed_at":"2025-01-22T20:29:28.124Z","dependency_job_id":null,"html_url":"https://github.com/AlinkaQA/Yandex.Scooter","commit_stats":null,"previous_names":["alinkaqa/yandex.scooter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlinkaQA%2FYandex.Scooter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlinkaQA%2FYandex.Scooter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlinkaQA%2FYandex.Scooter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlinkaQA%2FYandex.Scooter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlinkaQA","download_url":"https://codeload.github.com/AlinkaQA/Yandex.Scooter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246133000,"owners_count":20728599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-studio","charles","postman"],"created_at":"2025-02-03T13:18:45.531Z","updated_at":"2025-03-29T03:24:48.194Z","avatar_url":"https://github.com/AlinkaQA.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":" # \u003ca name=\"up\" /\u003eПроект Яндекс Самокат\n\nЯндекс Самокат — позволяет пользователям заранее зазазать на домой самокаты на определенное время и место. Пользователи получают гарантированную доступность, уведомления, и могут гибко управлять заказами через веб-приложение.\n\n## Содержание\n- [Задачи тестировщика](#задачи-тестировщика)\n- [Требования по проекту](#требования-по-проекту)\n- [Инструменты](#инструменты)\n- [Процесс работы](#процесс-работы)\n   - [1 спринт](#1-спринт)\n   - [2 спринт](#2-спринт)\n   - [3 спринт](#3-спринт)\n- [Выполнение тестов](#выполнение-тестов)\n\n## Задачи тестировщика\n\n\u003cdetails\u003e\n\u003csummary\u003e 1 спринт (веб-приложение) \u003c/summary\u003e \n\n1. Проанализировать требования к веб-приложению Яндекс Самокат\n2. Для экрана «Сделать заказ» составить проверки на валидацию полей\n3. Составить чек-лист по требованиям к функциональности экрана «Статус заказа»\n4. Провести тестирование и оформить баг-репорты\n5. Провести тестирование всей функциональности по макетам и требованиям\n\n***\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e 2 спринт (мобильное-приложение) \u003c/summary\u003e \n\n1. Проанализировать требования к мобильному приложению для курьеров Яндекс Самокат\n2. Спроектировать тест-кейсы для новой функциональности (выделено жирным шрифтом в требованиях к проекту)\n3. Провести тестирование и оформить баг-репорты\n\n***\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e 3 спринт (API приложения) \u003c/summary\u003e \n\n1. Проанализировать требования к бэкенду и документации к API\n2. Разработать чек-лист по требованиям (выделено жирным шрифтом в требованиях к проекту)\n3. Протестировать API и оформить баг-репорты\n\n***\n\n\u003c/details\u003e\n\n## Требования\n\n\u003cdetails\u003e\n\u003csummary\u003e Требования к веб-приложению \u003c/summary\u003e \n\n### Поддерживаемые окружения  \nПриложение поддерживает эти браузеры: Яндекс.Браузер не ниже версии 20.0.1, Chrome не ниже версии 85. Будет поддерживаться разрешение экрана 1280x720 и 1920x1080.  \n\n### Лендинг\nЕсть заголовок и чертёж самоката. При скролле происходит анимация: чертёж сменяется фотографией, появляется таблица с описанием самоката.  \nВ шапке лендинга есть две кнопки: «Заказать», «Статус заказа».   \nПоявляется запрос на согласие использовать куки.   \nЕсли доскроллить до третьего блока, появляется информация: «Как это работает», «Вопросы о важном».  \n\n#### Экран «Сделать заказ»  \nЧтобы сделать заказ, нужно заполнить две формы: «Для кого самокат», «Про аренду».  \n\n**Для кого самокат**\nПоля: «Имя», «Фамилия», «Адрес: куда привезти самокат», «Станция метро», «Телефон: на него позвонит курьер».  \nВсе поля обязательные. Если они не заполнены корректно, нельзя перейти на следующую страницу.  \nВнизу кнопка «Дальше»: она переводит на форму «Про аренду».   \n\n**Про аренду**\nПоля: «Когда привезти самокат», «Срок аренды», «Цвет», «Комментарий».   \n«Когда привезти самокат», «Срок аренды» — обязательные поля.   \n«Цвет», «Комментарий» — необязательные.  \n\n**Кнопка «Назад».** При нажатии пользователь переходит на страницу «Для кого самокат».  При переключении между страницами введённая информация сохраняется.  \n\n**Кнопка «Заказать».** Если все поля заполнены корректно, при клике по кнопке «Заказать» заказ будет оформлен. Появится всплывающее окно с текстом «Номер заказа NNNNN.   Запишите его: пригодится, чтобы отслеживать статус» и кнопкой «Посмотреть статус». Кнопка «Посмотреть статус» ведёт на экран «Статус заказа»: в нём уже заполнено поле «Номер заказа».  \nЕсли не все обязательные поля заполнены корректно, при нажатии на кнопку «Заказать» появится ошибка «Введите корректный \u003cимя поля\u003e»  \nПользователь может сделать несколько заказов один за другим.\n\n#### Экран «Статус заказа»\nЕсли нажать на «Статус заказа» в шапке лендинга, появляется поле ввода «Номер заказа». Нужно ввести значение и нажать Enter. Если номер заказа введён корректно, появляется информация:  \n- Данные заказа пользователя: имя, фамилия, адрес и остальные. Для всех полей действует правило: если текст не умещается в одной строке, он переносится на вторую.  \n- Цепочка статусов заказа. Текущий статус выделен чёрным, остальные — серые. Если статус пройден, цифра перед ним сменяется на галочку.  \nЕсли номер заказа введён некорректно, появляется сообщение об ошибке: «Такого заказа нет. Точно верный номер?».  \nНа экране статуса заказа четыре статуса. Активным может быть только один из них — он показывает, на какой стадии находится заказ:     \n- **«Самокат на складе»**. Становится активным, когда пользователь сделал заказ.  \n- **«Курьер едет к вам»**. Становится активным, когда курьер подтвердил у себя в приложении, что принял заказ. Когда статус активен, в подписи появляется имя курьера: «Курьер Фродо едет к вам». Если имя курьера слишком длинное и подпись не умещается в одну строчку, текст переносится на вторую строчку.  \n- **«Курьер на месте»**. Становится активным, когда курьер нажал кнопку «Завершить» у себя в приложении.  \n- **«Ну всё, теперь кататься»**. Становится активным, когда курьер подтвердил завершение заказа. Под заголовком статуса подпись «Аренда закончится...». Показываемое время рассчитывается от момента, когда самокат передали пользователю с учётом количества дней. Когда время аренды заканчивается, статус меняется на «Время аренды кончилось» с подписью «Скоро курьер заберёт самокат».  \nПользователь может ввести номер другого заказа и посмотреть его статус.  \n\n**Отмена заказа**\nЕсть кнопка «Отменить заказ». Если кликнуть по ней, появится всплывающее окно с текстом «Хотите отменить заказ?» На всплывающем окне две кнопки: «Отменить», «Назад». \nЕсли кликнуть по «Назад», пользователь вернётся на страницу статуса заказа.   \nЕсли кликнуть по «Отменить», появится всплывающее окно с текстом «Заказ отменён. Возвращайтесь, мы всегда вас ждём :)» и кнопкой «Хорошо». Кнопка «Хорошо» ведёт на главную страницу лендинга.  \nПользователь может отменить заказ, пока курьер не взял его в работу. Когда заказ уже у курьера, кнопка «Отменить заказ» будет некликабельной.  \nОтменённый заказ удаляется из системы. Пользователь не может его посмотреть.  \n\n**Просроченный заказ**\nЗаказ считается просроченным, если курьер не успел выполнить его вовремя. Например, пользователь заказал самокат на 1 января. Если 1 января самокат не доставлен до 23:59, этот заказ — просроченный.  \nЕсли заказ просрочен, его статус меняется на «Курьер задерживается», а подпись — на «Не успеем привезти самокат вовремя. Чтобы уточнить статус заказа, позвоните в поддержку: 0101». Статус и подпись подсвечиваются красным.  \nЕсли пользователю доставили просроченный заказ, отсчёт времени до конца аренды начинается с момента получения заказа.  \n\n### Доработка фронтенда\nВ цепочку статусов добавлен пятый статус: «Время аренды кончилось»**.** Это фича, которую реализовали только во фронтенде, и бэкенд ещё не готов. ****Раньше этот текст появлялся на месте четвёртого статуса — в момент, когда время аренды заканчивалось. Теперь текст в четвёртом статусе не меняется: он просто становится серым, как и остальные статусы.  \nПример ответа описан в документации к API в блоке *Orders — Получить заказ по его номеру.*  \nНомер нового статуса в запросе = 3. \n\n\u003cimg width=\"645\" alt=\"Снимок экрана 2025-01-23 в 16 44 25\" src=\"https://github.com/user-attachments/assets/3c83a629-bd6d-4b94-9456-6b0b1502546f\" /\u003e\n\n\u003cimg width=\"568\" alt=\"Снимок экрана 2025-01-23 в 16 44 40\" src=\"https://github.com/user-attachments/assets/9004f175-4fa4-4247-bf4c-473c0355efaf\" /\u003e\n\n\u003cimg width=\"578\" alt=\"Снимок экрана 2025-01-23 в 16 44 46\" src=\"https://github.com/user-attachments/assets/8238f036-7baf-4ca4-af09-5bbc68a73bae\" /\u003e\n\n### FAQ\n\n**Сколько это стоит? И как оплатить?**  \nСутки — 400 рублей. Оплата курьеру — наличными или картой.  \n\n**Вы привозите зарядку вместе с самокатом?**  \nСамокат приезжает к вам с полной зарядкой. Этого хватит на восемь суток — даже если будете кататься без передышек и во сне. Зарядка не понадобится.  \n\n**Сможете привезти самокат прямо сегодня?**  \nТолько начиная с завтрашнего дня. Но скоро станем расторопнее.  \n\n**Хочу сразу несколько самокатов! Так можно?**  \nПока что так: один заказ — один самокат. Если хотите покататься с друзьями, можете просто сделать несколько заказов.  \n\n**Можно ли продлить заказ или вернуть самокат раньше?**  \nПока что нет! Если что-то срочное — всегда можно позвонить в поддержку по номеру 0101.  \n\n**Можно ли отменить заказ?**  \nДа, отменить можно, пока курьер не выдвинулся к вам с самокатом. Штрафа не будет, объяснительной записки не попросим.  \n\n**Как рассчитывается время аренды?**  \nДопустим, вы оформляете заказ на 8 мая. Мы привозим самокат в эту дату до конца дня. Отсчёт времени аренды начинается с момента, когда вы оплатите заказ курьеру. Если мы привезли самокат 8 мая в 20:30, суточная аренда закончится 9 мая в 20:30.  \n\n**Я живу за МКАДом, привезёте?**  \nДа, обязательно. Всем самокатов! И Москве, и Московской области.  \n\n***\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e Макеты к веб-приложению \u003c/summary\u003e \n\n\u003cimg width=\"319\" alt=\"Снимок экрана 2025-01-23 в 16 48 41\" src=\"https://github.com/user-attachments/assets/a2406d25-475b-4a77-b4b2-b3d61fae98cc\" /\u003e\n\u003cimg width=\"696\" alt=\"Снимок экрана 2025-01-23 в 16 48 51\" src=\"https://github.com/user-attachments/assets/1c061835-c395-4f1b-80c9-384819ab4f5e\" /\u003e\n\u003cimg width=\"351\" alt=\"Снимок экрана 2025-01-23 в 16 48 56\" src=\"https://github.com/user-attachments/assets/00ce7799-79dd-4d69-b541-f7efeb2f78a0\" /\u003e\n\u003cimg width=\"709\" alt=\"Снимок экрана 2025-01-23 в 16 49 01\" src=\"https://github.com/user-attachments/assets/d127f4d9-c4ad-4504-b4fa-eb4edd037c42\" /\u003e\n\u003cimg width=\"638\" alt=\"Снимок экрана 2025-01-23 в 16 49 21\" src=\"https://github.com/user-attachments/assets/9f30fed4-e12b-471c-996c-aeae0118017b\" /\u003e\n\u003cimg width=\"686\" alt=\"Снимок экрана 2025-01-23 в 16 49 25\" src=\"https://github.com/user-attachments/assets/f0aeed06-9f3a-4737-b1c2-fd92f5abc975\" /\u003e\n\u003cimg width=\"884\" alt=\"Снимок экрана 2025-01-23 в 16 49 41\" src=\"https://github.com/user-attachments/assets/a401f642-9fae-44b1-b17b-992ce21913c6\" /\u003e\n\u003cimg width=\"999\" alt=\"Снимок экрана 2025-01-23 в 16 49 54\" src=\"https://github.com/user-attachments/assets/6a3ccc90-bddb-465c-97b5-dc8c20e95e61\" /\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e Требования к мобильному приложению \u003c/summary\u003e \n\n## Экран «Вход»  \n1. При первом входе в приложение появляется экран авторизации с логином и паролем.    \n2. Если курьер уже авторизовался, он видит экран списка заказов по умолчанию.  \n3. На экране два поля ввода: под логин и пароль. Есть кнопка «Войти».  \n4. Если тапнуть по «Не помню пароль», появится уведомление с текстом «Свяжитесь с менеджером: 0101» и кнопка «Ок».  \n5. Пользователь может выйти из приложения с любого экрана. Тогда при входе он снова попадёт на экран авторизации.  \n\n## Экран «Список заказов» \nНа экране две вкладки: «Все», «Мои».   \nНа вкладке «Все» курьеры видят один и тот же список заказов: это заказы без исполнителей.   \nКак только один из курьеров принимает заказ, он перемещается во вкладку «Мои». Остальные курьеры перестают его видеть.  \nВнутри вкладки «Мои» курьер видит заказы, которые он принял.   \nЧтобы список обновился, нужно потянуть за экран вниз (англ. pull-to-refresh).   \nПри pull-to-refresh:  \n1. Для вкладки «Все»: заказы, которые принял другой курьер, пропадают из списка.   \n2. Для вкладки «Все»: заказы, которые отменил пользователь, удаляются.   \n3. Для вкладок «Все» и «Мои»: карточки сортируются по дате доставки, которую указал пользователь. Просроченные заказы — сверху.  \nПри каких действиях список заказов обновляется:  \n1. При pull-to-refresh.  \n2. Если перейти во вкладку «Мои» на главном экране, а потом вернуться назад во вкладку «Все».  \n3. Если применить фильтр по станции метро.  \nПри каких действиях список заказов не обновляется:  \n1. Если принять заказ, он перемещается в «Мои», но остальной список не обновляется.  \nФункциональность экрана «Список заказов»:  \n1. Когда нет заказов, отображается экран «Заказов нет». Чтобы обновить экран, нужно сделать pull-to-refresh.  \n2. Когда пользователь делает заказ, появляется короткая версия карточки заказа.   \n3. Список заказов сортируется по приоритетности доставки: просроченные — сверху. Просроченным считается заказ, который не доставлен клиенту до 23:59 в нужный день. Рамка и дата просроченной карточки подсвечивается красным цветом, жирность текста — Medium. Условие работает для списков заказов «Все» и «Мои».  \n4. Внутри вкладки «Все» есть фильтр по выбору метро. С его помощью курьер может настроить, заказы на каких станциях он хочет видеть. По тапу на фильтр открывается список: он формируется из тех станций, на которые уже есть заказы. Если есть два и более заказа с одинаковым метро, в фильтре появляется только одно наименование: одинаковые станции не дублируются.  \n5. Карточка фильтра увеличивается по мере добавления станций метро. В карточку вмещается максимум 8 станций: начиная с девятой появляется скролл.  \n6. Карточка заказа может быть в краткой или полной версии.   \n    - Поля для краткой версии: «Адрес», «Дата доставки», выбранная станция метро.  \n    - Поля для полной версии: «Адрес», «Дата доставки», выбранная станция метро. Добавляется «Имя», «Фамилия», «Телефон», «Цвет», «Комментарий». Если пользователь не заполнил поле «Цвет», пишется «любой».  \n7. Переключить версию карточки можно через тап по карточке. Это работает для вкладок «Все» и «Мои».  \n8. При переходе в полный режим карточки кнопка «Принять» остаётся на месте. Карточки, которые идут следом, сдвигаются вниз.  \n9. Чтобы принять заказ, нужно тапнуть по кнопке «Принять». Это работает и для краткой, и для полной версий карточки.   \n10. При тапе по кнопке появляется уведомление с текстом «Хотите принять заказ?» и две кнопки «Да» и «Нет». Тап по «Нет» возвращает обратно на список заказов, кнопка «Принять» остаётся активной. Тап по «Да» подтверждает принятие заказа.  \n11. Чужой или отменённый заказ принять нельзя. Появляется сообщение: «Ты не можешь принять заказ. Его взял уже другой курьер или пользователь отменил его».  \n12. Когда заказ принят, карточка уезжает из списка «Все» — с анимацией движения вверх. У вкладки «Мои» появляется синяя точка — она обозначает, что во вкладке появился новый принятый заказ.   \n13. Логика работы синей точки: появляется, если есть непросмотренные карточки во вкладке «Мои». Автоматическое переключение на вкладку «Мои» не происходит.  \n14. Карточка, которую принял курьер, помещается во вкладку «Мои». Кнопка меняется на «Завершить». Завершить заказ можно тапом по кнопке «Завершить» — как в коротком, так и в полном виде карточки.   \n15. Если нажать на «Завершить», появляется уведомление «Вы завершили заказ?» и две кнопки — «Да» и «Нет». Тап по «Нет» возвращает обратно на список заказов, кнопка «Завершить» остаётся активной. Тап по «Да» подтверждает завершение заказа.  \n16. Когда заказ завершён, карточка заказа перемещается в самый низ списка. Если заказ был просрочен, но потом выполнен, карточка не подсвечивается красным.  \n17. Завершённые заказы сортируются по времени выполнения: чем раньше завершён заказ, тем он ниже.\n\n### Нотификация  \n**1. Уведомление приходит, когда осталось 2 часа, чтобы выполнить заказ. Заказ нужно доставить в день, который указал пользователь, до 23:59. Например, заказ на 8 мая. Если в 21:59 8 мая курьер ещё не доставил самокат, ему приходит пуш-уведомление.**   \n**2. Уведомление содержит такой текст: «2 часа до конца заказа. Заказ «ул Комнатная 12-14» нужно выполнить до `времени N`. Если не успеваете, предупредите поддержку: 0101»**\n**3. Переход по нотификации ведёт в приложение на вкладку «Мои».**  \n\n### Отсутствие интернет-соединения  \n**1. Если нет интернет-соединения, отображается всплывающее окно «Отсутствует интернет-соединение». Оно появляется, если тапнуть по любой активной кнопке на любом экране. Пропадает только по тапу по кнопке «Ок».**   \n**2. Когда пользователь тапнул по кнопке «Ок», всплывающее уведомление закрывается. Если интернета всё ещё нет, процесс повторяется: тап по любой активной зоне ведёт на всплывающее уведомление «Отсутствует интернет-соединение».**  \n\n### Ориентация  \nПриложение только в портретной ориентации.\n\n\u003cimg width=\"652\" alt=\"Снимок экрана 2025-01-23 в 16 59 35\" src=\"https://github.com/user-attachments/assets/4adc9407-1334-42fc-bebc-61d928b71b6d\" /\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e Макеты к веб-приложению \u003c/summary\u003e \n\n\u003cimg width=\"841\" alt=\"Снимок экрана 2025-01-23 в 17 00 21\" src=\"https://github.com/user-attachments/assets/0595d7f2-3877-43d4-9f0b-9309dc2e178c\" /\u003e\n\u003cimg width=\"585\" alt=\"Снимок экрана 2025-01-23 в 17 00 31\" src=\"https://github.com/user-attachments/assets/a6167f95-7a52-4bf1-9615-cb981408c6f4\" /\u003e\n\u003cimg width=\"192\" alt=\"Снимок экрана 2025-01-23 в 17 00 47\" src=\"https://github.com/user-attachments/assets/6232a2eb-d65a-4470-982e-252b731a9fd4\" /\u003e\n\u003cimg width=\"952\" alt=\"Снимок экрана 2025-01-23 в 17 00 55\" src=\"https://github.com/user-attachments/assets/5d68ef8d-339d-47ab-ab45-43f499f0c919\" /\u003e\n\u003cimg width=\"460\" alt=\"Снимок экрана 2025-01-23 в 17 01 01\" src=\"https://github.com/user-attachments/assets/723b5cb2-c30a-4537-a61f-c30af0bc4a71\" /\u003e\n\u003cimg width=\"659\" alt=\"Снимок экрана 2025-01-23 в 17 01 59\" src=\"https://github.com/user-attachments/assets/490be144-ac80-4f0f-aee1-cac1a5e00d1d\" /\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e Требования к бэкенду приложения \u003c/summary\u003e \n\n### Технологии\nЯзык приложения — JavaScript.   \nВыполняется в среде Node.js v12.17.0.  \nДоступ к приложению по протоколу HTTP 1.1.   \n\n### Общие требования\nПриложение использует базу данных. БД — PostgreSQL. Приложение взаимодействует с БД через npm-пакет `sequelize` поверх пакета `pg`. `sequelize` — ORM для работы с различными БД в node.js.  \nЗапросы логируются через модуль `winston`. Документация к приложению осуществляется с помощью модуля `apidoc`.\nПриложение должно отвечать требованиям REST.  \nВ приложении должен быть глобальный обработчик ошибок. При возникновении исключений они должны быть обработаны, а приложение должно продолжить работу.  \nОшибки приложения (неуспешно обработанные запросы, исключения; ответы, отличные от 2XX) должны логироваться в отдельный файл `error.log`  \n\n### Требования к URL\n**Вспомогательные URL**  \n- Должен присутствовать URL, через который можно проверить, что бэкенд запущен и принимает запросы. При успешном ответе должен вернуться статус `200 OK`.  \n- Должен присутствовать URL, через который работает поиск станций метро. В случае успешного поиска должны вернуться номер станции, её цвет и название. Если станций   несколько, для каждой должны возвращаться номер, цвет и название. Если станция не найдена, должен вернуться пустой список.  \n\n**URL для курьеров**  \n**- Должен присутствовать URL: при обращении к нему курьер может зарегистрироваться в приложении. URL должен принимать логин, пароль и имя курьера. Логин, хэш пароля и имя курьера должны записываться в поля *`login`, `passwordHash`* и *`firstName`* таблицы *Couriers*. В поле `passwordHash` хранится хэш пароля, генерируется стандартными функциями, поэтому соответствие хэш-пароль проверить можно через авторизацию.**  \n**- Поле login должно быть уникальным. При успешной регистрации соответствующая запись должна появиться в базе. При неуспешной должна вернуться ошибка. Подробнее об ошибках в документации `/docs/#api-Courier-CreateCourier`**  \n- Должен присутствовать URL для входа в учётную запись курьером. На вход должны отправляться логин и пароль курьера. При успешном входе должен вернуться `id` курьера. Если войти не удалось, должна вернуться ошибка.   \n**- Должен присутствовать URL для удаления учётной записи курьера. На вход должен подаваться `id` курьера в таблице Couriers. При удалении связанные заказы в таблице Orders должны быть стёрты.**  \n**URL для заказов**  \nКаждый раз, когда какой-нибудь из URL возвращает полные данные о заказе, ответ должен  содержать и статус каждого заказа. В статусе должны быть такие значения:  \n- `0` — заказ создан, больше ничего с ним не происходило;  \n- `1` — заказ принят курьером;    \n- `2` — заказ завершён;  \n- `-1` — заказ отменён.  \nСтатус должен вычисляться относительно значений полей в БД в таблице Orders (см. пункт «Описание содержимого базы данных»). Поля указаны в порядке приоритетности:  \n- `finished = true` -\u003e `status = 2`  \n- `cancelled = true` -\u003e `status = -1`  \n- `inDelivery = true` -\u003e `status = 1`  \n- `Остальные случаи` -\u003e `status = 0`  \nДолжен присутствовать URL для создания заказа. При создании заказа указываются следующие параметры:  \n- имя;  \n- фамилия;  \n- адрес;  \n- ближайшая станция метро;  \n- телефон;  \n- количество дней аренды;  \n- дата доставки;  \n- комментарий;  \n- список подходящих цветов.  \nПри создании заказа ему должен быть присвоен индивидуальный номер для отслеживания.  \n Переданные параметры записываются в таблицу `Orders` следующим образом:  \n- имя: `firstName`  \n- фамилия: `lastName`  \n- адрес: `address`  \n- ближайшая станция метро: `metroStation`  \n- телефон: `phone`  \n- количество дней аренды: `rentTime`  \n- дата доставки: `deliveryDate`  \n- комментарий: `comment`  \n- список подходящих цветов: `color`  \n- номер отслеживания: `track`\nЕсли заказ создан успешно, должен вернуться его номер отслеживания. В противном случае должна вернуться ошибка. Подробнее об ошибках в документации: `/docs/#api-Orders-CreateOrder`  \n**- Должен присутствовать URL для получения данных о заказе по его номеру отслеживания. На вход должен подаваться номер. Если соответствующий заказ найден, должны вернуться данные о нём. Иначе должна вернуться ошибка.**  \n- Должен присутствовать URL для принятия заказа курьером. URL принимает номер отслеживания заказа и id курьера. Если при принятии заказа возникли проблемы, должна вернуться ошибка.  \n- Должен присутствовать URL для отмены заказа. URL принимает номер для отслеживания заказа. В случае неуспешной отмены должна вернуться ошибка.  \n- Должен присутствовать URL для завершения заказа. На вход подаётся номер заказа. В случае неуспешного завершения должна вернуться ошибка.  \n- Должен присутствовать URL для получения всех заказов, которые соответствуют заданным параметрам. Параметры поиска — ближайшая станция метро и id курьера. Также должны быть переданы ограничения по количеству выводимых записей на странице и номер страницы. Подробнее об ошибках и кейсах применения в документации: `/docs/#api-Orders-GetOrdersPageByPage`  \n- Должен присутствовать URL для получения количества выполненных заказов курьера. На вход должен подаваться id курьера. Подробнее об ошибках и кейсах использования в документации: `/docs/#api-Couriers-GetOrdersCountByCourierId`  \n\n\u003cimg width=\"630\" alt=\"Снимок экрана 2025-01-23 в 17 05 25\" src=\"https://github.com/user-attachments/assets/94c2cb12-7509-4385-b61e-be97b5c400e6\" /\u003e\n\n### Описание содержимого базы данных\nБД состоит из двух таблиц: Couriers и Orders. Первая таблица содержит данные о курьерах, вторая — данные о заказах. \n\n\u003cimg width=\"593\" alt=\"Снимок экрана 2025-01-23 в 17 06 00\" src=\"https://github.com/user-attachments/assets/6e0b042e-f223-4f75-85b8-cabd1f4558ab\" /\u003e\n\n\u003c/details\u003e\n\n## Инструменты\n\u003cp align=\"left\"\u003e \n   \u003ca href=\"https://miro.com/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://w7.pngwing.com/pngs/885/629/png-transparent-miro-hd-logo-thumbnail.png\" width=\"36\" height=\"36\" alt=\"Miro\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://www.figma.com/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/figma-colored.svg\" width=\"36\" height=\"36\" alt=\"Figma\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.google.com/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://w7.pngwing.com/pngs/240/1015/png-transparent-g-suite-google-docs-google-angle-rectangle-logo.png\" width=\"36\" height=\"36\" alt=\"Google Sheets\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://tracker.yandex.ru/pages/my\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/d/d2/Yandex_Tracker_logo.svg\" width=\"36\" height=\"36\" alt=\"Яндекс Трекер\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://developer.android.com/studio\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Android_Studio_icon_%282023%29.svg/800px-Android_Studio_icon_%282023%29.svg.png\" width=\"36\" height=\"36\" alt=\"Android_Studio\" /\u003e\u003c/a\u003e\n   \u003ca\u003e\u003cimg src=\"https://d33wubrfki0l68.cloudfront.net/38b5c953a4667366685d55db55d057c86db1fc54/a0fdc/static/acae6b24d940347661ca901ea07f47c1/chrome-dev-logo-icon.png\" width=\"36\" height=\"36\" alt=\"Devtools\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.postman.com/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://seeklogo.com/images/P/postman-logo-0087CA0D15-seeklogo.com.png\" title=\"postman\" width=\"36\" height=\"36\" alt=\"Postman\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.charlesproxy.com/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://davidwalsh.name/demo/charlesproxyicon.svg\" width=\"36\" height=\"36\" alt=\"Charles\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.postgresql.org/\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/postgresql-colored.svg\" width=\"36\" height=\"36\" alt=\"PostgreSQL\" /\u003e\u003c/a\u003e\n\u003c/p\u003e \n\n## Процесс работы\n\n\u003cdetails\u003e\n\u003csummary\u003e 1 спринт \u003c/summary\u003e  \n \n#### Чек-лист Статус заказа\n\n\u003cimg width=\"884\" alt=\"Снимок экрана 2025-01-23 в 17 16 43\" src=\"https://github.com/user-attachments/assets/c2bdfdc3-7541-4224-8fd6-62e3bcfff14f\" /\u003e\n\n#### Проверка на валидацию к экрану «Сделать заказ».\n\n\u003cimg width=\"1204\" alt=\"Снимок экрана 2025-01-23 в 17 19 28\" src=\"https://github.com/user-attachments/assets/e5b3c0ad-1715-477a-a41f-92dfde3074ee\" /\u003e\n\n#### Баги вне тестовой документации\n\n\u003cimg width=\"1129\" alt=\"Снимок экрана 2025-01-23 в 17 20 26\" src=\"https://github.com/user-attachments/assets/31a0defa-98b4-4d03-8bb3-1b073fbda43c\" /\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e 2 спринт \u003c/summary\u003e \n\n#### Проверка Нотификации и Интернет соединения + верстка\n\n\u003cimg width=\"1273\" alt=\"Снимок экрана 2025-01-23 в 17 22 20\" src=\"https://github.com/user-attachments/assets/738e9a25-cb25-4eb0-854b-7b3e569c13a1\" /\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e 3 спринт \u003c/summary\u003e \n \n#### Чек-лист и результаты выполнения тестов API Яндекс.Самокат\t\t\t\t\n\n\u003cimg width=\"941\" alt=\"Снимок экрана 2025-01-23 в 17 23 40\" src=\"https://github.com/user-attachments/assets/bd46739c-02f5-4a2e-a3a5-f38662b191f8\" /\u003e\n\n***\n\u003c/details\u003e\n\n## Выполнение тестов\n\n\u003cdetails\u003e\n\u003csummary\u003e Выполнение тестов \u003c/summary\u003e \n\n[Тестовая документация](https://docs.google.com/spreadsheets/d/1ebqsCGZcvZDTk6sciUTUwK8tjaZiV2tYjRQjVdww6mA/edit?gid=336872680#gid=336872680)\n\nБаг-репорты\n\n\u003cimg width=\"1228\" alt=\"Снимок экрана 2025-01-23 в 17 28 44\" src=\"https://github.com/user-attachments/assets/ab7af3e0-dfaa-4813-a325-d913bd0d2926\" /\u003e\n\u003cimg width=\"1224\" alt=\"Снимок экрана 2025-01-23 в 17 28 51\" src=\"https://github.com/user-attachments/assets/af44a070-7f2d-4f37-b949-970e012f896b\" /\u003e\n\u003cimg width=\"1215\" alt=\"Снимок экрана 2025-01-23 в 17 28 58\" src=\"https://github.com/user-attachments/assets/2c92554f-7f55-4e2c-bc1b-d76cf3414678\" /\u003e\n\u003cimg width=\"1204\" alt=\"Снимок экрана 2025-01-23 в 17 29 04\" src=\"https://github.com/user-attachments/assets/2d0044ef-3d77-4727-8d91-5e07beff17c9\" /\u003e\n\u003cimg width=\"1218\" alt=\"Снимок экрана 2025-01-23 в 17 29 20\" src=\"https://github.com/user-attachments/assets/fad3f18c-458e-4539-85c3-c3f1be6f0277\" /\u003e\n\n***\n\u003c/details\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falinkaqa%2Fyandex.scooter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falinkaqa%2Fyandex.scooter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falinkaqa%2Fyandex.scooter/lists"}