From 001f161fc5f349c8e5f82bd8deb7693907c7e7a6 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Thu, 20 Nov 2025 17:56:43 +0900 Subject: [PATCH] =?UTF-8?q?feat(series-list-all):=20=EC=99=84=EA=B2=B0?= =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EC=A0=84=EC=B2=B4=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SodaLive/Sources/App/AppStep.swift | 2 +- .../Content/Series/Main/Home/SeriesMainHomeView.swift | 4 ++++ .../Sources/Content/Series/Main/SeriesMainItemView.swift | 1 + SodaLive/Sources/Content/Series/SeriesApi.swift | 5 +++-- SodaLive/Sources/Content/Series/SeriesListAllView.swift | 6 +++++- .../Sources/Content/Series/SeriesListAllViewModel.swift | 5 +++-- SodaLive/Sources/Content/Series/SeriesRepository.swift | 3 ++- SodaLive/Sources/ContentView.swift | 4 ++-- SodaLive/Sources/UI/Component/SeriesListItemView.swift | 1 + 9 files changed, 22 insertions(+), 9 deletions(-) diff --git a/SodaLive/Sources/App/AppStep.swift b/SodaLive/Sources/App/AppStep.swift index 6c05c30..16bc3ec 100644 --- a/SodaLive/Sources/App/AppStep.swift +++ b/SodaLive/Sources/App/AppStep.swift @@ -128,7 +128,7 @@ enum AppStep { case seriesDetail(seriesId: Int) - case seriesAll(creatorId: Int? = nil, creatorNickname: String? = nil, isOriginal: Bool = false) + case seriesAll(creatorId: Int? = nil, creatorNickname: String? = nil, isOriginal: Bool = false, isCompleted: Bool = false) case seriesContentAll(seriesId: Int, seriesTitle: String) diff --git a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift index 343960b..fc265a8 100644 --- a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift +++ b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift @@ -32,6 +32,10 @@ struct SeriesMainHomeView: View { Text("전체보기") .font(.custom(Font.preRegular.rawValue, size: 14)) .foregroundColor(.init(hex: "78909C")) + .onTapGesture { + AppState.shared + .setAppStep(step: .seriesAll(isCompleted: true)) + } } .padding(.horizontal, 24) diff --git a/SodaLive/Sources/Content/Series/Main/SeriesMainItemView.swift b/SodaLive/Sources/Content/Series/Main/SeriesMainItemView.swift index fb501dd..e8b5a8d 100644 --- a/SodaLive/Sources/Content/Series/Main/SeriesMainItemView.swift +++ b/SodaLive/Sources/Content/Series/Main/SeriesMainItemView.swift @@ -92,6 +92,7 @@ struct SeriesMainItemView: View { .font(.custom(Font.preRegular.rawValue, size: 18)) .foregroundColor(Color(hex: "B0BEC5")) .lineLimit(1) + .multilineTextAlignment(.leading) .padding(.horizontal, 8) Text(item.creator.nickname) diff --git a/SodaLive/Sources/Content/Series/SeriesApi.swift b/SodaLive/Sources/Content/Series/SeriesApi.swift index 7e03255..360005f 100644 --- a/SodaLive/Sources/Content/Series/SeriesApi.swift +++ b/SodaLive/Sources/Content/Series/SeriesApi.swift @@ -9,7 +9,7 @@ import Foundation import Moya enum SeriesApi { - case getSeriesList(creatorId: Int?, isOriginal: Bool, sortType: SeriesListAllViewModel.SeriesSortType, isAdultContentVisible: Bool, contentType: ContentType, page: Int, size: Int) + case getSeriesList(creatorId: Int?, isOriginal: Bool, isCompleted: Bool, sortType: SeriesListAllViewModel.SeriesSortType, isAdultContentVisible: Bool, contentType: ContentType, page: Int, size: Int) case getSeriesDetail(seriesId: Int, isAdultContentVisible: Bool) case getSeriesContentList(seriesId: Int, isAdultContentVisible: Bool, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType) case getRecommendSeriesList(isAdultContentVisible: Bool, contentType: ContentType) @@ -45,12 +45,13 @@ extension SeriesApi: TargetType { var task: Moya.Task { switch self { - case .getSeriesList(let creatorId, let isOriginal, let sortType, let isAdultContentVisible, let contentType, let page, let size): + case .getSeriesList(let creatorId, let isOriginal, let isCompleted, let sortType, let isAdultContentVisible, let contentType, let page, let size): var parameters = [ "sortType": sortType, "isAdultContentVisible": isAdultContentVisible, "contentType": contentType, "isOriginal": isOriginal, + "isCompleted": isCompleted, "page": page - 1, "size": size ] as [String : Any] diff --git a/SodaLive/Sources/Content/Series/SeriesListAllView.swift b/SodaLive/Sources/Content/Series/SeriesListAllView.swift index 9f8d2e6..e9804af 100644 --- a/SodaLive/Sources/Content/Series/SeriesListAllView.swift +++ b/SodaLive/Sources/Content/Series/SeriesListAllView.swift @@ -15,12 +15,15 @@ struct SeriesListAllView: View { var creatorNickname: String? = nil var isOriginal = false + var isCompleted = false var body: some View { NavigationView { BaseView(isLoading: $viewModel.isLoading) { VStack(spacing: 0) { - if isOriginal { + if isCompleted { + DetailNavigationBar(title: "완결 시리즈") + } else if isOriginal { DetailNavigationBar(title: "오직 보이스온에서만") } else { DetailNavigationBar(title: "\(creatorNickname ?? "") 님의 시리즈 전체보기") @@ -66,6 +69,7 @@ struct SeriesListAllView: View { .onAppear { viewModel.creatorId = creatorId viewModel.isOriginal = isOriginal + viewModel.isCompleted = isCompleted viewModel.getSeriesList() } } diff --git a/SodaLive/Sources/Content/Series/SeriesListAllViewModel.swift b/SodaLive/Sources/Content/Series/SeriesListAllViewModel.swift index 8e3d61e..07b5818 100644 --- a/SodaLive/Sources/Content/Series/SeriesListAllViewModel.swift +++ b/SodaLive/Sources/Content/Series/SeriesListAllViewModel.swift @@ -18,6 +18,7 @@ final class SeriesListAllViewModel: ObservableObject { var creatorId: Int? = nil var isOriginal: Bool = false + var isCompleted: Bool = false @Published var isLoading = false @Published var errorMessage = "" @@ -26,13 +27,13 @@ final class SeriesListAllViewModel: ObservableObject { var page = 1 var isLast = false - private let pageSize = 10 + private let pageSize = 20 func getSeriesList() { if !isLoading && !isLast { isLoading = true repository - .getSeriesList(creatorId: creatorId, isOriginal: isOriginal, sortType: .NEWEST, page: page, size: pageSize) + .getSeriesList(creatorId: creatorId, isOriginal: isOriginal, isCompleted: isCompleted, sortType: .NEWEST, page: page, size: pageSize) .sink { result in switch result { case .finished: diff --git a/SodaLive/Sources/Content/Series/SeriesRepository.swift b/SodaLive/Sources/Content/Series/SeriesRepository.swift index 278b254..93d73bd 100644 --- a/SodaLive/Sources/Content/Series/SeriesRepository.swift +++ b/SodaLive/Sources/Content/Series/SeriesRepository.swift @@ -13,11 +13,12 @@ import Moya class SeriesRepository { private let api = MoyaProvider() - func getSeriesList(creatorId: Int?, isOriginal: Bool, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) -> AnyPublisher { + func getSeriesList(creatorId: Int?, isOriginal: Bool, isCompleted: Bool, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) -> AnyPublisher { return api.requestPublisher( .getSeriesList( creatorId: creatorId, isOriginal: isOriginal, + isCompleted: isCompleted, sortType: sortType, isAdultContentVisible: UserDefaults.isAdultContentVisible(), contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL, diff --git a/SodaLive/Sources/ContentView.swift b/SodaLive/Sources/ContentView.swift index a829630..82121a5 100644 --- a/SodaLive/Sources/ContentView.swift +++ b/SodaLive/Sources/ContentView.swift @@ -193,8 +193,8 @@ struct ContentView: View { case .contentAllByTheme(let themeId): ContentAllByThemeView(themeId: themeId) - case .seriesAll(let creatorId, let creatorNickname, let isOriginal): - SeriesListAllView(creatorId: creatorId, creatorNickname: creatorNickname, isOriginal: isOriginal) + case .seriesAll(let creatorId, let creatorNickname, let isOriginal, let isCompleted): + SeriesListAllView(creatorId: creatorId, creatorNickname: creatorNickname, isOriginal: isOriginal, isCompleted: isCompleted) case .seriesDetail(let seriesId): SeriesDetailView(seriesId: seriesId) diff --git a/SodaLive/Sources/UI/Component/SeriesListItemView.swift b/SodaLive/Sources/UI/Component/SeriesListItemView.swift index f2b99b8..d920f64 100644 --- a/SodaLive/Sources/UI/Component/SeriesListItemView.swift +++ b/SodaLive/Sources/UI/Component/SeriesListItemView.swift @@ -59,6 +59,7 @@ struct SeriesListItemView: View { .font(.custom(Font.preMedium.rawValue, size: 18)) .foregroundColor(Color.grayee) .lineLimit(2) + .multilineTextAlignment(.leading) .frame(width: itemWidth, alignment: .leading) Text(item.publishedDaysOfWeek)