{"id":25633032,"url":"https://github.com/2gpb/testtaskavito","last_synced_at":"2025-02-22T21:19:50.908Z","repository":{"id":276855594,"uuid":"930529493","full_name":"2Gpb/TestTaskAvito","owner":"2Gpb","description":"An iOS shopping app with paginated loading, search with filters, image caching, and shimmer effects. Supports search history, error handling, a shopping list with persistence, and sharing.","archived":false,"fork":false,"pushed_at":"2025-02-19T10:06:34.000Z","size":4946,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-19T10:23:27.637Z","etag":null,"topics":["swift","test-task","uikit"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/2Gpb.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-02-10T19:27:47.000Z","updated_at":"2025-02-19T10:06:37.000Z","dependencies_parsed_at":"2025-02-10T20:34:02.972Z","dependency_job_id":"5b04138c-db7c-4454-b3a8-56d11ca896e9","html_url":"https://github.com/2Gpb/TestTaskAvito","commit_stats":null,"previous_names":["2gpb/testtaskavito"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FTestTaskAvito","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FTestTaskAvito/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FTestTaskAvito/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FTestTaskAvito/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2Gpb","download_url":"https://codeload.github.com/2Gpb/TestTaskAvito/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240237304,"owners_count":19769742,"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":["swift","test-task","uikit"],"created_at":"2025-02-22T21:19:49.416Z","updated_at":"2025-02-22T21:19:50.902Z","avatar_url":"https://github.com/2Gpb.png","language":"Swift","readme":"# TestTaskAvito\r\n\r\n### Описание проекта:\r\nПроект включает постраничную загрузку товаров, удобный поиск с возможностью фильтрации, кэширование изображений для быстрой загрузки, а также плавный shimmer-эффект при подгрузке данных. \r\nРеализовано сохранение истории поисковых запросов, обработка empty-state при отсутствии товаров или ошибке загрузки, детальная карточка товара и удобный список покупок\r\nс возможностью сохранять, удалять и делиться товарами.. Кроме того, предусмотрена поддержка тестов для обеспечения стабильности и надежности приложения.\r\n\r\n### Дизайн\r\n[Макет в Figma](https://www.figma.com/design/XO8gGlwIRKt8AhTk6Tbdje/Test-task-Avito?node-id=0-1\u0026t=up2szI7Bw4SPyM5g-1)\r\n\r\n### Архитектура:\r\n**SVIP (VIPER):**\r\n\r\n- View – Отображает интерфейс и взаимодействует с пользователем.\r\n- Interactor – Бизнес-логика приложения.\r\n- Presenter – Подготовка данных для пользовательского интерфейса и реализация Router'a.\r\n- Router – Управление переходами между экранами.\r\n- Worker – Обработка данных и сетевых запросов.\r\n\r\nБолее подробно об архитектурном шаблоне: [Статья](https://habr.com/ru/companies/wildberries/articles/798275/)\r\n\r\n\r\n### Технологии\r\n\r\n- Swift\r\n- UIKit | UIView+Pin\r\n- URLSession\r\n- UserDefaults | CoreData\r\n- NSCache\r\n- XCTest\r\n\r\n### Функционал:\r\n**1. Экран поиска (выдача товаров) ✅** \r\n- Список товаров с постраничной загрузкой\r\n- Отображение товаров в виде плитки (2 товара в ряду)\r\n- Возможность фильтровать товары по категории или ценовому диапазону\r\n- Поиск по тексту с сохранением 7 последних неповторяющихся запросов\r\n- Empty-state при отсутствии товаров и Error-state при ошибке загрузки\r\n- Shimmer-эффект при загрузке фото\r\n- Переход на карточку товара\r\n\r\n**2. Карточка товара ✅**\r\n- Отображение изображения, заголовка, описания, цены и категории\r\n- Placeholder при ошибке загрузки изображения\r\n- Возможность добавить товар в список покупок\r\n- Возможность перехода в список покупок \r\n- Возможность увеличить/уменьшить количество товара\r\n- Возможность поделиться товаром\r\n- Возврат на экран поиска\r\n\r\n**3. Список покупок ✅**\r\n- Отображение добавленных товаров с картинками, ценами и количеством\r\n- Возможность изменить количество товара или удалить его\r\n- Сохранение списка покупок между сессиями (персистентность)\r\n- Возможность очистить весь список\r\n- Синхронизация состояния с экраном поиска и карточками товаров\r\n- Функция «поделиться» списком покупок в мессенджере или заметках\r\n- Переход на карточку товара\r\n\r\n### Тестирование\r\n\r\n**Проект содержит XCTest-тесты**\r\n\r\n- Реализованы Unit-тесты для бизнес-логики отдельных модулей\r\n\r\n### Запуск проекта\r\n1. ```git clone git@github.com:2Gpb/TestTaskAvito.git```\r\n2. Открыть TestTaskAvito.xcodeproj в Xcode\r\n3. Запустить проект\r\n\r\n\r\n# Visual\r\n\u003cimg src=\"https://github.com/user-attachments/assets/9affd266-587f-4bca-ade6-71addb38e9e6\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/61ed71e2-ed86-4863-82b8-c645853458c4\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/6e6c9f41-7bd4-4944-9b72-0cb19f551adf\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/932c78f0-0393-4015-b6a5-85cd0e0c0e46\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/813c030f-a768-426f-aefe-e9ac83bc420a\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/c6add688-0514-410e-85e1-c7a1c229bb24\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/8707e50e-689f-4e67-8579-e09e9f0f6b91\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/58170c31-32f6-4325-8f4e-f132f014c4ae\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/e69893b9-06fc-4d05-a408-69da60392b6c\" width=\"358.33\"/\u003e\r\n\u003cimg src=\"https://github.com/user-attachments/assets/f9936564-d925-449b-b06e-aa6726b034f7\" width=\"358.33\"/\u003e\r\n\r\n![Запись экрана 2025-02-19 в 11 45 22](https://github.com/user-attachments/assets/26cb66d5-edeb-4f7e-ae4c-38768280ba6c)\r\n![Запись экрана 2025-02-19 в 12 01 31](https://github.com/user-attachments/assets/58a09591-070f-4503-9122-36ad5a831fbd)\r\n\r\n\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gpb%2Ftesttaskavito","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2gpb%2Ftesttaskavito","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gpb%2Ftesttaskavito/lists"}