Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mightyk1ngrichard/vk-tech-2024-internship
Необходимо получить с сервера и отобразить список элементов. Список должен поддерживать бесконечный плавный скролл, постепенную подгрузку элементов, локальное удаление и редактирование.
https://github.com/mightyk1ngrichard/vk-tech-2024-internship
vk
Last synced: about 4 hours ago
JSON representation
Необходимо получить с сервера и отобразить список элементов. Список должен поддерживать бесконечный плавный скролл, постепенную подгрузку элементов, локальное удаление и редактирование.
- Host: GitHub
- URL: https://github.com/mightyk1ngrichard/vk-tech-2024-internship
- Owner: mightyK1ngRichard
- License: apache-2.0
- Created: 2024-12-02T19:00:37.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2024-12-10T00:17:12.000Z (about 2 months ago)
- Last Synced: 2024-12-11T21:06:46.141Z (about 2 months ago)
- Topics: vk
- Language: Swift
- Homepage:
- Size: 17 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vk-tech-2024-internship
## Стэк
- API: Было использован `YouTube API`. [Токен был получен здесь](https://console.cloud.google.com/apis/dashboard?inv=1&invt=AbjVgw&project=premium-origin-443819-h5)
> [!CAUTION]
> **API токен имеет ограничения на число запросов** и приложение может перестать работать без него. Тогда стоит сменить токен в файле `YouTubeListViewModel.swift` на 119 строке. (Токен я прятать не стал, т.к приложение тестовое и в условиях об этом не просилось)- CleanSwift архитектура: используется для обеспечения ясной структуры, модульности и тестируемости приложения. Потоки данных организованы следующим образом:
View -> ViewModel -> Interactor -> Presenter -> ViewModel -> Router.
- SwiftData: используется для кэширования данных и изображений, что обеспечивает мгновенный доступ к уже загруженной информации.
- AsyncStream и TaskGroup: позволяют обрабатывать загрузку изображений асинхронно и параллельно, минимизируя задержки и повышая производительность.## Про работу приложения
Данные подгружаются из двух источников:
1. Сеть: Сетевые данные всегда отображаются в начале списка. Они имеют более высокий приоритет.
2. Локальная память устройства: Локальные данные загружаются из SwiftData и отображаются в конце списка с пометкой “Saved”.Поведение при смене режима сортировки:
- Новые данные из сети добавляются в начало списка.
- Уже отображённые данные остаются такими же и отображаются внизу.Бесконечный скролл:
- При прокрутке данные загружаются и добавляются в конец списка.Лоудинги:
- При самом первом запросе в сеть отображаются шиммеры карточек сниппетов. В последствии, достаются из памяти и сети. При бесконечном скролле отображаем лоудер внизу экрана.## Как работает редактирование/удаление
Редактировать и удалять можно только данные, сохранённые локально.
- Удаление:
- Свайпом на экране ленты.
- По кнопке “Удалить” на экране деталей.
- Редактирование:
- Доступно только для сохранённых данных. Изменения синхронизируются с локальным кэшем.## Тостеры
При ошибках, успешном редактировании/удалении, показываются тостеры, информирующие о событиях.## Фотографии
## Видеодемонстрация
[Ссылка на яндекс диск](https://disk.yandex.ru/d/QU0Sv1klnjYPig)