{"id":25455453,"url":"https://github.com/eegrishina/drone-pharmacy","last_synced_at":"2026-04-17T15:33:02.589Z","repository":{"id":241386196,"uuid":"804426217","full_name":"eegrishina/drone-pharmacy","owner":"eegrishina","description":"Web application for medication delivery with order status updates and product availability based on server data.","archived":false,"fork":false,"pushed_at":"2024-12-04T22:27:54.000Z","size":16885,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-05-16T16:49:56.795Z","etag":null,"topics":["async-operation","client-server","error-handling","fetch-api","jest","localstorage","pagination","react","react-router"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/eegrishina.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":"2024-05-22T15:05:25.000Z","updated_at":"2024-12-18T13:30:38.000Z","dependencies_parsed_at":"2024-06-21T00:14:07.150Z","dependency_job_id":"d4309fe1-6a4b-4a48-9986-a50b69c5bae0","html_url":"https://github.com/eegrishina/drone-pharmacy","commit_stats":null,"previous_names":["kaktusgr/drone-pharmacy","eegrishina/drone-pharmacy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eegrishina/drone-pharmacy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eegrishina%2Fdrone-pharmacy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eegrishina%2Fdrone-pharmacy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eegrishina%2Fdrone-pharmacy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eegrishina%2Fdrone-pharmacy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eegrishina","download_url":"https://codeload.github.com/eegrishina/drone-pharmacy/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eegrishina%2Fdrone-pharmacy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31934339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["async-operation","client-server","error-handling","fetch-api","jest","localstorage","pagination","react","react-router"],"created_at":"2025-02-18T00:57:41.570Z","updated_at":"2026-04-17T15:33:02.558Z","avatar_url":"https://github.com/eegrishina.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Drone Pharmacy\n\n### Демонстрация оформления заказа\n\u003cimg src=\"./README_img/drone-pharmacy-demonstration.gif\" alt=\"Order demonstration\" width=\"80%\"\u003e\n\n## Описание  \nВеб-приложение по управлению заказами на доставку лекарств с помощью дронов, включающее динамическое обновление статусов заказов, управление корзиной и выбор товаров с учетом доступности на сервере.  \n\n**Серверная часть проекта** основана на готовом решении, предоставленном другим разработчиком в рамках его минипроекта. Для получения более подробной информации вы можете ознакомиться с документацией по [ссылке](https://gitlab.com/freeShlak/musalademo).\n\n**Дизайн сайта** был разработан отдельным дизайнером, который создал макет и визуальное оформление проекта. Для разработки были выбраны только те страницы, где реализован функционал, связанный с сервером. Дополнительные детали можно найти в предоставленных материалах по [ссылке](https://www.figma.com/design/TWRdLedZGtCX8gdmmqAQSE/Drone-Pharmacy).\n\n## Используемые технологии\n\n- `React` — фреймворк для создания пользовательских интерфейсов  \n- `Fetch API` — взаимодействие с сервером  \n- `LocalStorage` — хранение данных о выбранных товарах  \n- `React Router` — навигация и управление маршрутизацией  \n\n## Основные возможности\n\n1. **Сортировка товаров в каталоге**\n    - Реализована возможность сортировки товаров по различным критериям:\n        - по алфавиту\n        - по весу\n        - по доступности — можно просмотреть все или только доступные товары\n   - Сортировка помогает пользователям быстро находить нужные товары и улучшает удобство взаимодействия с каталогом.\n\n2. **Постраничное отображение данных**  \n   - Разделение каталога и истории заказов на страницы.  \n   - Данные загружаются частями с сервера, что уменьшает объем передаваемых данных.  \n   - Догрузка данных осуществляется в зависимости от событий пользователя, отслеживаемых с помощью `event listeners`.\n\n3. **Управление корзиной**  \n   - **Актуальное состояние товаров**  \n   Корзина отображает актуальную информацию о товарах, синхронизируя их состояние с сервером.\n\n   - **Получение данных о доступных дронах**  \n   При загрузке корзины выполняется запрос к серверу для получения информации о доступных дронах, включая их статус, ID и максимальный перевозимый вес.\n\n   - **Рассчет максимальной вместимости**  \n   Для доступного дрона рассчитывается максимальный вес товаров, который он может перевозить. Если текущий вес всех выбранных товаров превышает максимальный лимит доступного дрона, отображается кнопка `Choose the best capacity`.  \n   При активации кнопки функция автоматически определяет, какие товары можно отправить с учетом их веса и доступного места в дроне. Невместимые товары остаются в корзине невыбранными.\n\n   - **Интерактивность управления**  \n   Пользователь может вручную изменять выбор товаров, даже после выполнения расчета вместимости. Все изменения отображаются мгновенно и фиксируются в `local storage`. \n\n4. **Проверка доступности сервера**  \n   - **Проверка подключения**  \n   Реализованы попытки повторного подключения к серверу с интервалами и ограничением на количество попыток.\n\n   - **Обработка ошибок**  \n   Отслеживаются ошибки сети, сервера или неверных запросов. Пользователь получает уведомления с пояснениями и рекомендациями.\n\n   - **Перенаправление при недоступности**  \n   Если сервер остается недоступным, пользователь перенаправляется на страницу ошибки. \n\n5. **Модальные окна**  \n   - Отображение ошибки при проблемах с сетью или сервером.  \n   - Отображение информации о выбранном заказе в истории заказов.  \n\n6. **Загрузка данных**  \n   - Вместо компонентов отображаются плейсхолдеры до завершения загрузки данных.  \n   - На странице с историей заказов отображается спиннер при загрузке дополнительных данных с сервера.\n\n7. **Локальное хранилище**  \n   - **Хранение данных**  \n   В `local storage` сохраняются данные корзины, список выбранных товаров и информация о доступном дроне для доставки, что позволяет поддерживать актуальное состояние при перезагрузке или смене страницы.  \n\n8. **Тестирование функций с использованием Jest**\n   - Были написаны тесты для проверки корректности работы функций получения текущей и последующей дат при оформлении заказа.  \n\n\n## Установка\n\n1. Клонировать репозиторий:  \n   ```  \n   git clone \u003cURL\u003e  \n   ```  \n2. Установить зависимости:  \n   ```  \n   npm install  \n   ```  \n3. Запустить проект:  \n   ```  \n   npm start  \n   ```  \n\n## Планируемые доработки\n- Реализация механизма повторной отправки запросов на сервер в случае его недоступности на странице заказов. На данный момент при запуске таймера для повторных запросов возникает проблема с дублированием данных из-за использования useCallback, что требует доработки.\n\n- Расширение покрытия тестами React-компонентов.\n\n## Обратная связь\n\nПриветствуются критика и комментарии. Советы и предложения будут учтены в дальнейшей разработке.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feegrishina%2Fdrone-pharmacy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feegrishina%2Fdrone-pharmacy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feegrishina%2Fdrone-pharmacy/lists"}