Ссылка: https://drive.google.com/file/d/1IBjIGRfFkwz_rOA3tB96Bl7H07clcvw9/view?usp=sharing
- SwiftUI
- MVVM
- Создание трех экранов, добавление NavigationStack для их взаимодействия - план — 2 часа, факт — 2 часа
- Верстка ячейки для экрана “Мои NFT” - план — 4 часа, факт — 2 часа
- Верстка ячейки для экрана “Избранные NFT” - план — 4 часа, факт — 2 часа
- Верстка экрана профиля - план — 5 часов, факт — 8 часов
- Верстка экрана “Мои NFT” - план — 2 дня, факт — 2 дня
- Верстка экрана “Избранные NFT” - план — 2 дня, факт — 2 дня
- Добавление сетевого слоя для экрана профиля - план — 2 дня, факт — 2 дня
- Добавление сетевого слоя для экрана ”Мои NFT” - план — 2 дня, факт — 2 дня
- Добавление сетевого слоя для экрана “Избранные NFT” - план — 2 дня, факт — 2 дня
- Верстка ячейки главного экрана каталога - 2 ч.
- Верстка табличного представления главного экрана с использованием готовых ячеек - 2 ч.
- Реализация логики сетевых запросов на экране каталога с отображением лоадера - 4 ч.
- Реализация пагинации запроса экрана каталога - 2 ч.
- Реализация навигации между экранами - 3 ч.
- Реализация алерта сортировки на экране каталога - 30 минут.
- Реализация логики сортировки на экране каталога - 1 ч.
- Верстка ячейки NFT товара на экране коллекции NFT - 4 ч.
- Верстка экрана коллекции NFT - 3 ч
- Реализация логики сетевых запросов на экране коллекции NFT с отображением лоадера - 3 ч.
- Реализация пагинации запроса экрана коллекции NFT - 1 ч.
- Реализация открытия WEbView с автором коллекции на экране коллекции NFT - 1 ч.
- Реализация логики добавления/удаления в избранное NFT товара на экране коллекции NFT - 1 ч.
- Реализация логики добавления/удаления в корзину NFT товара на экране коллекции NFT - 1 ч.
-
Модели данных и сервисы
- Расширить модель Nft (name, rating, price)
- Создать модели Currency, BasketItem, enum SortOption
- Реализовать BasketStorage и BasketService
- Реализовать PaymentService для обработки оплаты (est: 1 час; fact: 4 часа)
-
Основной экран корзины
- Создать BasketViewModel на MVVM
- Сверстать BasketView с таблицей NFT (изображение, название, рейтинг, цена, кнопка удаления)
- Сверстать нижнюю панель где количество NFT, сумма, кнопка "К оплате"
- Реализовать состояния: загрузка, пустая корзина (est: 2 часа; fact: 4 часа)
-
Интеграция и базовая функциональность
- Интегрировать сервисы в ServicesAssembly
- Подключить загрузку данных корзины
- Настроить навигацию на экран оплаты (est: 3 часа; fact: 5 часов)
-
Удаление NFT
- Сверстать попап подтверждения удаления с изображением NFT и кнопками Удалить и Вернуться
- Реализовать логику удаления в BasketService и обновление UI (est: 1 час; fact: 2 часа)
-
Функционал сортировки
- Сверстать попап сортировки по цене, по рейтингу, по названию
- Реализовать методы сортировки в BasketViewModel
- Сохранять выбранную сортировку через сторедж ну или UserDefaults
- Добавить кнопку сортировки в верхнюю часть экрана (est: 2 часа; fact: 3 часа)
-
Экран выбора валюты
- Создать PaymentViewModel
- Сверстать PaymentView с коллекцией валют LazyVGrid
- Реализовать выбор валюты с визуальным выделением
- Сверстать ссылку на пользовательское соглашение https://yandex.ru/legal/practicum_termsofuse и кнопку Оплатить
- Создать модель PaymentRequest и интегрировать с PaymentService (est: 2 часа; fact: 3 часа)
-
Вебвьюшка для пользовательского соглашения
- Создать WebView компонент WKWebView + UIViewRepresentable
- Реализовать экран TermsOfServiceView с загрузкой URL соглашения
- Настроить навигацию по ссылке (est: 4 часа; fact: 6 часов)
-
Обработка состояний оплаты
- Сверстать экран успешной оплаты PaymentSuccessView с изображением и поздравлением
- Сверстать попап ошибки оплаты с кнопками Повторить и Отмена
- Реализовать логику обработки успеха (очистка корзины,навигация)
- Реализовать логику обработки ошибки (повтор запроса, отмена) (est: 4 часа; fact: 6 часов)