diff --git a/Features/ClubsFeatures/Sources/ClubsList.swift b/Features/ClubsFeatures/Sources/ClubsList.swift index fb06be0d..a80290a4 100644 --- a/Features/ClubsFeatures/Sources/ClubsList.swift +++ b/Features/ClubsFeatures/Sources/ClubsList.swift @@ -125,9 +125,9 @@ public struct ClubsListFeature { state.subscribedClubsSortType = by return .none case .getClubsList: - return .run { [state] send in + return .run { send in do { - let result = try await kuringLink.getClubsList(state.selectedClubType, state.selectedDivisions.map { $0.code.lowercased() }) + let result = try await kuringLink.getClubsList(.all, []) await send(.getClubsListResponse(.success(result))) } catch { await send(.getClubsListResponse(.failure(.error(error.localizedDescription)))) diff --git a/Shared/Models/Sources/Clubs.swift b/Shared/Models/Sources/Clubs.swift index 4a5bff1f..523cc0c3 100644 --- a/Shared/Models/Sources/Clubs.swift +++ b/Shared/Models/Sources/Clubs.swift @@ -24,6 +24,7 @@ public struct Club: Codable, Equatable { public let category, division: String public var isSubscribed: Bool public var subscriberCount: Int + public let recruitmentStatus: RecruitmentStatus public let recruitStartDate, recruitEndDate: String? public init( @@ -35,6 +36,7 @@ public struct Club: Codable, Equatable { division: String, isSubscribed: Bool, subscriberCount: Int, + recruitmentStatus: RecruitmentStatus, recruitStartDate: String?, recruitEndDate: String? ) { @@ -46,6 +48,7 @@ public struct Club: Codable, Equatable { self.division = division self.isSubscribed = isSubscribed self.subscriberCount = subscriberCount + self.recruitmentStatus = recruitmentStatus self.recruitStartDate = recruitStartDate self.recruitEndDate = recruitEndDate } @@ -60,6 +63,7 @@ public struct Club: Codable, Equatable { division: "central", isSubscribed: true, subscriberCount: 19, + recruitmentStatus: .recruiting, recruitStartDate: "2026-05-01T00:00:00", recruitEndDate: "2026-06-03T23:59:59" ) diff --git a/Shared/Models/Sources/Notice.swift b/Shared/Models/Sources/Notice.swift index 2d206e46..8c4daabe 100644 --- a/Shared/Models/Sources/Notice.swift +++ b/Shared/Models/Sources/Notice.swift @@ -51,7 +51,7 @@ extension Notice { /// try Notice(userInfo: userInfo) /// ``` public init(userInfo: [String: Any]) throws { - guard let id = userInfo["id"] as? Int else { + guard let idString = userInfo["id"] as? String, let id = Int(idString) else { throw DecodingError.noID } guard let articleID = userInfo["articleId"] as? String else { diff --git a/Shared/PushNotifications/Sources/Message/Message.swift b/Shared/PushNotifications/Sources/Message/Message.swift index 87a6550b..1d999065 100644 --- a/Shared/PushNotifications/Sources/Message/Message.swift +++ b/Shared/PushNotifications/Sources/Message/Message.swift @@ -33,7 +33,6 @@ extension Message { self = .notice( try Notice(userInfo: userInfo) ) - // 커스텀 알림 case "admin": @AppStorage("com.kuring.sdk.notification.custom") diff --git a/UIKit/ClubsUI/Sources/ClubsDetail/ClubInfoDetailView.swift b/UIKit/ClubsUI/Sources/ClubsDetail/ClubInfoDetailView.swift index 934eecb4..9bfd83b9 100644 --- a/UIKit/ClubsUI/Sources/ClubsDetail/ClubInfoDetailView.swift +++ b/UIKit/ClubsUI/Sources/ClubsDetail/ClubInfoDetailView.swift @@ -353,9 +353,11 @@ private extension ClubInfoDetailView { } private func ddayText(for club: Club) -> (text: String, isUrgent: Bool) { + // 마감일이 있다면 D-{n} 형식 노출, 없다면 recruitmentStatus 기반 guard let end = parseDate(club.recruitEndDate ?? "") else { - return ("상시모집", false) + return (club.recruitmentStatus.rawValue, false) } + let days = Calendar.current.dateComponents([.day], from: .now, to: end).day ?? 0 switch days { diff --git a/UIKit/ClubsUI/Sources/ClubsList/Views/ClubCardView.swift b/UIKit/ClubsUI/Sources/ClubsList/Views/ClubCardView.swift index c657bdc9..09785a09 100644 --- a/UIKit/ClubsUI/Sources/ClubsList/Views/ClubCardView.swift +++ b/UIKit/ClubsUI/Sources/ClubsList/Views/ClubCardView.swift @@ -18,7 +18,7 @@ struct ClubCardView: View { } private var isRecruiting: Bool { - dday.text != "마감 종료" + club.recruitmentStatus != .closed } // 12자 초과시 ... 처리 @@ -53,8 +53,8 @@ private extension ClubCardView { AsyncImage(url: URL(string: club.iconImageUrl ?? "")) { image in image .resizable() + .aspectRatio(1, contentMode: .fit) .frame(width: 84) - .aspectRatio(contentMode: .fit) .clipShape(RoundedRectangle(cornerRadius: 12)) } placeholder: { RoundedRectangle(cornerRadius: 14) @@ -105,7 +105,7 @@ private extension ClubCardView { Text(club.summary) .padding(.top, 4) .font(.system(size: 14)) - .foregroundStyle(!isRecruiting ? Color.Kuring.caption2 : Color.Kuring.caption1) + .foregroundStyle(Color.Kuring.caption1) .lineLimit(2) .truncationMode(.tail) } @@ -160,8 +160,9 @@ private extension ClubCardView { } func ddayText(for club: Club) -> (text: String, isUrgent: Bool) { + // 마감일이 있다면 D-{n} 형식 노출, 없다면 recruitmentStatus 기반 guard let end = parseDate(club.recruitEndDate ?? "") else { - return ("상시모집", false) + return (club.recruitmentStatus.rawValue, false) } let days = Calendar.current.dateComponents([.day], from: Date(), to: end).day ?? 0 diff --git a/UIKit/ClubsUI/Sources/ClubsList/Views/ClubsListView.swift b/UIKit/ClubsUI/Sources/ClubsList/Views/ClubsListView.swift index ec6d669d..ad4e7205 100644 --- a/UIKit/ClubsUI/Sources/ClubsList/Views/ClubsListView.swift +++ b/UIKit/ClubsUI/Sources/ClubsList/Views/ClubsListView.swift @@ -65,9 +65,7 @@ struct ClubsListView: View { } // MARK: - Sub-views - private extension ClubsListView { - var sortByView: some View { HStack { Text("총 \(store.filteredClubs?.clubs.count ?? 0)개")