From 43629a27b89979606235923abb98b63898c5b5cc Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Sat, 15 Nov 2025 03:04:25 +0900 Subject: [PATCH] =?UTF-8?q?feat(series-all-home):=20=EC=8B=9C=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20=EC=A0=84=EC=B2=B4=EB=B3=B4=EA=B8=B0=20=ED=99=88=20?= =?UTF-8?q?=ED=83=AD=20-=20=EC=B6=94=EC=B2=9C=20=EC=8B=9C=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20UI=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Series/Main/Home/SeriesMainHomeView.swift | 107 +++++++++++++----- .../Main/Home/SeriesMainHomeViewModel.swift | 43 ++++++- .../Content/Series/Main/SeriesMainApi.swift | 12 ++ .../Series/Main/SeriesMainRepository.swift | 9 ++ 4 files changed, 142 insertions(+), 29 deletions(-) diff --git a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift index 09e843f..c1c32eb 100644 --- a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift +++ b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift @@ -12,45 +12,98 @@ struct SeriesMainHomeView: View { @StateObject var viewModel = SeriesMainHomeViewModel() var body: some View { - ScrollView(.vertical, showsIndicators: false) { - VStack(spacing: 48) { - SeriesMainHomeBannerView(bannerList: viewModel.banners) - .padding(.top, 24) - - if !viewModel.completedSeriesList.isEmpty { - VStack(alignment: .leading, spacing: 16) { - HStack(spacing: 0) { - Text("완결 시리즈") - .font(.custom(Font.preBold.rawValue, size: 24)) - .foregroundColor(.white) + ZStack { + ScrollView(.vertical, showsIndicators: false) { + VStack(spacing: 48) { + if !viewModel.banners.isEmpty { + SeriesMainHomeBannerView(bannerList: viewModel.banners) + .padding(.top, 24) + } + + if !viewModel.completedSeriesList.isEmpty { + VStack(alignment: .leading, spacing: 16) { + HStack(spacing: 0) { + Text("완결 시리즈") + .font(.custom(Font.preBold.rawValue, size: 24)) + .foregroundColor(.white) + + Spacer() + + Text("전체보기") + .font(.custom(Font.preRegular.rawValue, size: 14)) + .foregroundColor(.init(hex: "78909C")) + } + .padding(.horizontal, 24) - Spacer() - - Text("전체보기") - .font(.custom(Font.preRegular.rawValue, size: 14)) - .foregroundColor(.init(hex: "78909C")) + ScrollView(.horizontal, showsIndicators: false) { + LazyHStack(spacing: 16) { + ForEach(0...self, from: responseData) + + if let data = decoded.data, decoded.success { + self.recommendSeriesList = data } else { if let message = decoded.message { self.errorMessage = message diff --git a/SodaLive/Sources/Content/Series/Main/SeriesMainApi.swift b/SodaLive/Sources/Content/Series/Main/SeriesMainApi.swift index d588b4f..bbb1c8e 100644 --- a/SodaLive/Sources/Content/Series/Main/SeriesMainApi.swift +++ b/SodaLive/Sources/Content/Series/Main/SeriesMainApi.swift @@ -10,6 +10,7 @@ import Moya enum SeriesMainApi { case fetchHome(isAdultContentVisible: Bool, contentType: ContentType) + case getRecommendSeriesList(isAdultContentVisible: Bool, contentType: ContentType) } extension SeriesMainApi: TargetType { @@ -18,6 +19,9 @@ extension SeriesMainApi: TargetType { switch self { case .fetchHome: return "/audio-content/series/main" + + case .getRecommendSeriesList: + return "/audio-content/series/main/recommend" } } @@ -29,6 +33,14 @@ extension SeriesMainApi: TargetType { "contentType": contentType, ] as [String : Any] + return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString) + + case .getRecommendSeriesList(let isAdultContentVisible, let contentType): + let parameters = [ + "isAdultContentVisible": isAdultContentVisible, + "contentType": contentType, + ] as [String : Any] + return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString) } } diff --git a/SodaLive/Sources/Content/Series/Main/SeriesMainRepository.swift b/SodaLive/Sources/Content/Series/Main/SeriesMainRepository.swift index 073a7da..84661ac 100644 --- a/SodaLive/Sources/Content/Series/Main/SeriesMainRepository.swift +++ b/SodaLive/Sources/Content/Series/Main/SeriesMainRepository.swift @@ -21,4 +21,13 @@ class SeriesMainRepository { ) ) } + + func getRecommendSeriesList() -> AnyPublisher { + return api.requestPublisher( + .getRecommendSeriesList( + isAdultContentVisible: UserDefaults.isAdultContentVisible(), + contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL + ) + ) + } }