{"id":27462205,"url":"https://github.com/2gpb/avito","last_synced_at":"2025-06-28T06:34:16.621Z","repository":{"id":276855594,"uuid":"930529493","full_name":"2Gpb/Avito","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-03-17T08:36:34.000Z","size":4950,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T22:00:05.047Z","etag":null,"topics":["avito-tech","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-03-17T08:36: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/Avito","commit_stats":null,"previous_names":["2gpb/testtaskavito","2gpb/avito"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/2Gpb/Avito","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FAvito","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FAvito/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FAvito/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FAvito/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2Gpb","download_url":"https://codeload.github.com/2Gpb/Avito/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2Gpb%2FAvito/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260924532,"owners_count":23083524,"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":["avito-tech","swift","test-task","uikit"],"created_at":"2025-04-15T21:59:54.753Z","updated_at":"2025-06-20T10:08:43.285Z","avatar_url":"https://github.com/2Gpb.png","language":"Swift","readme":"# Avito\r\n\r\n### Project Description:\r\nThe project includes paginated product loading, a convenient search with filtering capabilities, image caching for fast loading, and a smooth shimmer effect when loading data.  \r\nIt implements search query history saving, empty-state handling when no products are available or in case of a loading error, a detailed product card, and a user-friendly shopping list  \r\nwith the ability to save, delete, and share products. Additionally, test support is provided to ensure the stability and reliability of the application.\r\n\r\n### Design\r\n[Figma Prototype](https://www.figma.com/design/XO8gGlwIRKt8AhTk6Tbdje/Test-task-Avito?node-id=0-1\u0026t=up2szI7Bw4SPyM5g-1)\r\n\r\n### Architecture:\r\n**SVIP (VIPER):**\r\n\r\n- **View** – Displays the interface and interacts with the user.\r\n- **Interactor** – Contains the business logic of the application.\r\n- **Presenter** – Prepares data for the user interface and implements the Router.\r\n- **Router** – Manages screen transitions.\r\n- **Worker** – Handles data processing and network requests.\r\n\r\nMore details about the architectural pattern: [Article](https://habr.com/ru/companies/wildberries/articles/798275/)\r\n\r\n### Technologies\r\n\r\n- Swift\r\n- UIKit | UIView+Pin\r\n- URLSession\r\n- GCD\r\n- UserDefaults | CoreData\r\n- NSCache\r\n- SOLID\r\n- XCTest\r\n\r\n### Functionality:\r\n**1. Search Screen (Product Listing) ✅**  \r\n- Paginated product list  \r\n- Grid view display (2 products per row)  \r\n- Ability to filter products by category or price range  \r\n- Text search with the last 7 unique queries saved  \r\n- Empty-state when no products are available and error-state for loading failures  \r\n- Shimmer effect when loading images  \r\n- Navigation to the product card  \r\n\r\n**2. Product Card ✅**  \r\n- Displays image, title, description, price, and category  \r\n- Placeholder in case of image loading failure  \r\n- Ability to add the product to the shopping list  \r\n- Navigation to the shopping list  \r\n- Ability to increase/decrease product quantity  \r\n- Ability to share the product  \r\n- Return to the search screen  \r\n\r\n**3. Shopping List ✅**  \r\n- Displays added products with images, prices, and quantities  \r\n- Ability to change the quantity or remove a product  \r\n- Persistent shopping list across sessions  \r\n- Option to clear the entire list  \r\n- State synchronization with the search screen and product cards  \r\n- \"Share\" function to send the shopping list via messenger or notes  \r\n- Navigation to the product card  \r\n\r\n### Testing  \r\n\r\n**The project includes XCTest tests**  \r\n\r\n- Unit tests implemented for business logic in separate modules  \r\n\r\n### Running the Project  \r\n1. ```git clone git@github.com:2Gpb/TestTaskAvito.git```  \r\n2. Open **TestTaskAvito.xcodeproj** in Xcode  \r\n3. Run the project  \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","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gpb%2Favito","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2gpb%2Favito","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gpb%2Favito/lists"}