An open API service indexing awesome lists of open source software.

https://github.com/2gpb/testtaskavito

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.
https://github.com/2gpb/testtaskavito

swift test-task uikit

Last synced: 12 months ago
JSON representation

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.

Awesome Lists containing this project

README

          

# TestTaskAvito

### Описание проекта:
Проект включает постраничную загрузку товаров, удобный поиск с возможностью фильтрации, кэширование изображений для быстрой загрузки, а также плавный shimmer-эффект при подгрузке данных.
Реализовано сохранение истории поисковых запросов, обработка empty-state при отсутствии товаров или ошибке загрузки, детальная карточка товара и удобный список покупок
с возможностью сохранять, удалять и делиться товарами.. Кроме того, предусмотрена поддержка тестов для обеспечения стабильности и надежности приложения.

### Дизайн
[Макет в Figma](https://www.figma.com/design/XO8gGlwIRKt8AhTk6Tbdje/Test-task-Avito?node-id=0-1&t=up2szI7Bw4SPyM5g-1)

### Архитектура:
**SVIP (VIPER):**

- View – Отображает интерфейс и взаимодействует с пользователем.
- Interactor – Бизнес-логика приложения.
- Presenter – Подготовка данных для пользовательского интерфейса и реализация Router'a.
- Router – Управление переходами между экранами.
- Worker – Обработка данных и сетевых запросов.

Более подробно об архитектурном шаблоне: [Статья](https://habr.com/ru/companies/wildberries/articles/798275/)

### Технологии

- Swift
- UIKit | UIView+Pin
- URLSession
- UserDefaults | CoreData
- NSCache
- XCTest

### Функционал:
**1. Экран поиска (выдача товаров) ✅**
- Список товаров с постраничной загрузкой
- Отображение товаров в виде плитки (2 товара в ряду)
- Возможность фильтровать товары по категории или ценовому диапазону
- Поиск по тексту с сохранением 7 последних неповторяющихся запросов
- Empty-state при отсутствии товаров и Error-state при ошибке загрузки
- Shimmer-эффект при загрузке фото
- Переход на карточку товара

**2. Карточка товара ✅**
- Отображение изображения, заголовка, описания, цены и категории
- Placeholder при ошибке загрузки изображения
- Возможность добавить товар в список покупок
- Возможность перехода в список покупок
- Возможность увеличить/уменьшить количество товара
- Возможность поделиться товаром
- Возврат на экран поиска

**3. Список покупок ✅**
- Отображение добавленных товаров с картинками, ценами и количеством
- Возможность изменить количество товара или удалить его
- Сохранение списка покупок между сессиями (персистентность)
- Возможность очистить весь список
- Синхронизация состояния с экраном поиска и карточками товаров
- Функция «поделиться» списком покупок в мессенджере или заметках
- Переход на карточку товара

### Тестирование

**Проект содержит XCTest-тесты**

- Реализованы Unit-тесты для бизнес-логики отдельных модулей

### Запуск проекта
1. ```git clone git@github.com:2Gpb/TestTaskAvito.git```
2. Открыть TestTaskAvito.xcodeproj в Xcode
3. Запустить проект

# Visual









![Запись экрана 2025-02-19 в 11 45 22](https://github.com/user-attachments/assets/26cb66d5-edeb-4f7e-ae4c-38768280ba6c)
![Запись экрана 2025-02-19 в 12 01 31](https://github.com/user-attachments/assets/58a09591-070f-4503-9122-36ad5a831fbd)