ios_app/Shared/Network/PostService.swift
2025-08-14 20:07:12 +03:00

98 lines
5.6 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Foundation
class PostService {
static let shared = PostService()
private var posts: [Post] = []
init() {
generateMockPosts()
}
private func generateMockPosts() {
guard posts.isEmpty else { return }
let sampleTitles = [
"Обзор TikTok UI", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс",
"Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы",
"Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс",
"Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы",
"Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс",
"Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы",
"Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс",
"Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы",
"Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс",
"Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы",
"Лучший UI 2025", "Завершаем проект"
]
let sampleDescriptions = [
"Первый тестовый пост с видео", "Фейковый контент для ленты", "Видео с котиком 🐱",
"Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь",
"Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы",
"Фейковый контент для ленты", "Видео с котиком 🐱", "Интерфейс в стиле TikTok",
"Просто тестирую отображение", "Код и UI — любовь", "Видео в реальном времени",
"Интересный UX пример", "Анимации, переходы, свайпы", "Фейковый контент для ленты",
"Видео с котиком 🐱", "Интерфейс в стиле TikTok", "Просто тестирую отображение",
"Код и UI — любовь", "Видео в реальном времени", "Интересный UX пример",
"Анимации, переходы, свайпы", "Фейковый контент для ленты", "Видео с котиком 🐱",
"Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь",
"Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы",
"Вот это да, пост работает!"
]
for i in 0..<32 {
let mediaID = UUID()
let thumbID = UUID()
let postID = UUID()
let authorId = UUID()
let authorUserName = "username_\(Int.random(in: 1...5))"
// Генерируем случайные размеры для изображения
let width = 1080 // Стандартная ширина
let randomRatio = Double.random(in: 1.0...1.77) // от 1:1 до ~9:16
let height = Int(Double(width) * randomRatio)
let post = Post(
id: postID,
title: sampleTitles[i],
description: sampleDescriptions[i],
media: [
MediaItem(id: mediaID, type: .video, width: width, height: height)
],
mediaOrder: [mediaID],
thumbnailID: thumbID,
duration: Double.random(in: 15.0...180.0),
createdAt: Date(),
updatedAt: Date(),
views: Int.random(in: 1_000...10_000),
likes: Int.random(in: 100...2_000),
saves: Int.random(in: 10...500),
commentsCount: Int.random(in: 0...100),
isLikedByCurrentUser: Bool.random(),
isSavedByCurrentUser: Bool.random(),
authorID: authorId,
authorUsername: authorUserName,
hashtags: ["#тест", "#видео", "#swiftui", "#ui"].shuffled().prefix(2).map { $0 },
location: Bool.random() ? "Москва" : nil,
languageCode: Bool.random() ? ["ru", "en"] : ["ru"],
accessLevel: [.public, .friends, .archive].randomElement()!
)
posts.append(post)
}
}
func fetchAllPosts(completion: @escaping ([Post]) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
completion(self.posts)
}
}
func fetchPost(by id: UUID, completion: @escaping (Post?) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
let result = self.posts.first { $0.id == id }
completion(result)
}
}
}