From f0cc5d24d8323d6ab77da31dafe39e224689a7db Mon Sep 17 00:00:00 2001 From: Jini Date: Mon, 9 Feb 2026 21:11:37 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EA=B3=B5=EB=B0=A9=EB=B0=B0?= =?UTF-8?q?=EB=84=88=20gif=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Firebase/WorkshopDataManager.swift | 46 ------------------- .../Home/Views/Main/HomeView.swift | 5 -- .../ViewModels/WorkshopViewModel.swift | 13 ------ 3 files changed, 64 deletions(-) diff --git a/Keychy/Keychy/Core/Firebase/WorkshopDataManager.swift b/Keychy/Keychy/Core/Firebase/WorkshopDataManager.swift index d02b43d5f..b7b8d5b79 100644 --- a/Keychy/Keychy/Core/Firebase/WorkshopDataManager.swift +++ b/Keychy/Keychy/Core/Firebase/WorkshopDataManager.swift @@ -29,9 +29,6 @@ class WorkshopDataManager { var isLoading: Bool = false var errorMessage: String? = nil - var workshopBannerURL: URL? - var workshopThumbnailURL: URL? - var workshopThumbnailImage: UIImage? // prefetch한 썸네일 이미지 private init() {} @@ -90,49 +87,6 @@ class WorkshopDataManager { sounds = await fetchItems(collection: "Sound") updateLastFetched(for: "Sound") } - - /// 워크샵 배너 가져오기 - func fetchWorkshopBanner() async { - guard - let snapshot = try? await Firestore.firestore() - .collection("WorkshopBanner") - .document("default") - .getDocument(), - let data = snapshot.data() - else { - return - } - - await MainActor.run { - // GIF URL - if let urlString = data["gif"] as? String, - let url = URL(string: urlString) { - workshopBannerURL = url - } - - // 썸네일 URL - if let thumbnailString = data["thumbnail"] as? String, - let thumbnailURL = URL(string: thumbnailString) { - workshopThumbnailURL = thumbnailURL - } - } - - // 썸네일 이미지 즉시 로드 (UIImage로 저장) - if let thumbnailURL = workshopThumbnailURL { - if let response = try? await ImagePipeline.shared.image(for: thumbnailURL) { - await MainActor.run { - workshopThumbnailImage = response - } - } - } - - // GIF는 prefetch만 (애니메이션이라 UIImage로 저장 불가) - if let gifURL = workshopBannerURL { - let prefetcher = ImagePrefetcher() - prefetcher.startPrefetching(with: [gifURL]) - } - } - /// 캐시를 강제로 무효화하고 다시 가져오기 func forceRefresh() async { diff --git a/Keychy/Keychy/Presentation/Home/Views/Main/HomeView.swift b/Keychy/Keychy/Presentation/Home/Views/Main/HomeView.swift index a2d566335..9117da4f6 100644 --- a/Keychy/Keychy/Presentation/Home/Views/Main/HomeView.swift +++ b/Keychy/Keychy/Presentation/Home/Views/Main/HomeView.swift @@ -95,11 +95,6 @@ struct HomeView: View { userManager.startNotificationListener() } .task { - // Workshop 배너 백그라운드 prefetch (메인 뭉치 로드를 블로킹하지 않음) - Task(priority: .background) { - await WorkshopDataManager.shared.fetchWorkshopBanner() - } - // 네트워크 체크 guard NetworkManager.shared.isConnected else { viewModel.hasNetworkError = true diff --git a/Keychy/Keychy/Presentation/Workshop/ViewModels/WorkshopViewModel.swift b/Keychy/Keychy/Presentation/Workshop/ViewModels/WorkshopViewModel.swift index 482d037ba..39a9222e1 100644 --- a/Keychy/Keychy/Presentation/Workshop/ViewModels/WorkshopViewModel.swift +++ b/Keychy/Keychy/Presentation/Workshop/ViewModels/WorkshopViewModel.swift @@ -148,19 +148,6 @@ class WorkshopViewModel { var isWorkshopBannerLoading: Bool = true var hasNetworkError: Bool = false - // WorkshopDataManager의 값을 직접 참조 (중복 저장 방지) - var workshopBannerURL: URL? { - dataManager.workshopBannerURL - } - - var workshopThumbnailURL: URL? { - dataManager.workshopThumbnailURL - } - - var workshopThumbnailImage: UIImage? { - dataManager.workshopThumbnailImage - } - /// 보유 아이템 로딩 완료 여부 (templates가 로드되면 자동 계산 가능) var hasLoadedOwnedItems: Bool { !loadedCategories.isEmpty