Skip to content

Commit 6a8aed4

Browse files
authored
Merge pull request #103 from Team-HMH/refacto/#97
Refactor [#97] 챌린지 모듈 리팩토링
2 parents 73dfa9a + 66d3d52 commit 6a8aed4

25 files changed

Lines changed: 761 additions & 587 deletions

File tree

HMH_Tuist_iOS/Projects/Core/Sources/Extension/Date+.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,20 @@ public extension String {
2121
formatter.dateFormat = format
2222
return formatter.date(from: self)
2323
}
24+
25+
26+
func challengeHeaderFormattd() -> String? {
27+
let inputDateFormatter = DateFormatter()
28+
inputDateFormatter.dateFormat = "yyyy-MM-dd"
29+
guard let date = inputDateFormatter.date(from: self) else {
30+
return nil
31+
}
32+
33+
let outputDateFormatter = DateFormatter()
34+
outputDateFormatter.dateFormat = "M월 d일"
35+
let formattedDateString = outputDateFormatter.string(from: date)
36+
37+
return formattedDateString
38+
}
39+
2440
}

HMH_Tuist_iOS/Projects/Data/Sources/Mapper/Challenge/ChallengeSuccessInfoMapper.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,9 @@ extension FinishedDailyChallenge {
1616
return .init(challengeDate: challengeDate, isSuccess: isSuccess)
1717
}
1818
}
19+
20+
extension ChallengeSuccessInfo {
21+
func toDTO() -> FinishedDailyChallenge {
22+
return .init(challengeDate: challengeDate, isSuccess: isSuccess)
23+
}
24+
}

HMH_Tuist_iOS/Projects/Data/Sources/Repository/ChallengeRepository.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ public struct ChallengeRepository: ChallengeRepositoryType {
2626
.mapToDomainError(to: ChallengeError.self)
2727
}
2828

29-
public func getSuccesChallenge() -> AnyPublisher<[String], ChallengeError> {
30-
service.getSuccesChallenge()
29+
public func postSuccesChallenge(sucessInfo: [ChallengeSuccessInfo]) -> AnyPublisher<[String], ChallengeError> {
30+
let request = ChallengeSuccessRequest(finishedDailyChallenges: sucessInfo.map { $0.toDTO() })
31+
return service.postSuccesChallenge(request: request)
3132
.map { $0.statuses }
3233
.mapToDomainError(to: ChallengeError.self)
3334
}

HMH_Tuist_iOS/Projects/Data/Tests/Sources/ChallengeRepositoryTests/Base/MockChallengeService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ final public class MockChallengeService: ChallengeServiceType {
3030
return getDailyChallengeResult
3131
}
3232

33-
public func getSuccesChallenge() -> AnyPublisher<ChallengeSuccessResult, HMHNetworkError> {
33+
public func postSuccesChallenge() -> AnyPublisher<ChallengeSuccessResult, HMHNetworkError> {
3434
return getSuccesChallengeResult
3535
}
3636

HMH_Tuist_iOS/Projects/Data/Tests/Sources/ChallengeRepositoryTests/GetSuccesChallengeTest/GetSuccesChallengeTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ extension ChallegeRepositoryTests {
2525
.setFailureType(to: HMHNetworkError.self)
2626
.eraseToAnyPublisher()
2727

28-
sut.getSuccesChallenge()
28+
sut.postSuccesChallenge()
2929
.sink(receiveCompletion: { completion in
3030
if case .failure(let error) = completion {
3131
XCTFail("챌린지 성공 여부 리스트 전송 API 변환 중 실패했습니다: 에러 \(error)")
@@ -45,7 +45,7 @@ extension ChallegeRepositoryTests {
4545
for expected in testCases {
4646
mockService.getSuccesChallengeResult = Fail(error: expected).eraseToAnyPublisher()
4747

48-
sut.getSuccesChallenge()
48+
sut.postSuccesChallenge()
4949
.sink(
5050
receiveCompletion: handleCompletion(
5151
expectedError: .networkError,

HMH_Tuist_iOS/Projects/Domain/Sources/Entity/Challenge/ChallengeDetail.swift

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,44 @@
88

99
import Foundation
1010

11-
@frozen public enum ChallengeStatus: String {
12-
case EARNED
13-
case FAILURE
14-
case UNEARNED
15-
}
16-
17-
public struct ChallengeDetail: Equatable {
18-
let statuses: [String]
11+
public struct ChallengeDetail {
12+
let statuses: [PointStatusEnum]
1913
let todayIndex: Int
2014
let startDate: String
2115
let challengeInfo: ChallengeInfo
2216

23-
public init(statuses: [String], todayIndex: Int, startDate: String, challengeInfo: ChallengeInfo) {
17+
public enum InfoType {
18+
case period
19+
case goalTime
20+
}
21+
22+
public init(statuses: [PointStatusEnum], todayIndex: Int, startDate: String, challengeInfo: ChallengeInfo) {
2423
self.statuses = statuses
2524
self.todayIndex = todayIndex
2625
self.startDate = startDate
2726
self.challengeInfo = challengeInfo
2827
}
28+
29+
public func getTodayIndex() -> Int {
30+
return todayIndex
31+
}
32+
33+
public func getStatuses() -> [PointStatusEnum] {
34+
return statuses
35+
}
36+
37+
public func getStartDate() -> String {
38+
return startDate
39+
}
40+
41+
public func getChallengeInfo(_ infoType: InfoType) -> Int {
42+
switch infoType {
43+
case .period:
44+
return challengeInfo.period
45+
case .goalTime:
46+
return challengeInfo.goalTime
47+
}
48+
}
2949
}
3050

3151
public struct ChallengeInfo: Equatable {
@@ -38,4 +58,8 @@ public struct ChallengeInfo: Equatable {
3858
self.goalTime = goalTime
3959
self.apps = apps
4060
}
61+
62+
public func getPeriod() -> Int {
63+
return period
64+
}
4165
}

HMH_Tuist_iOS/Projects/Domain/Sources/Entity/Challenge/ChallengeSuccessInfo.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
//
88

99
public struct ChallengeSuccessInfo {
10-
let challengeDate: String
11-
let isSuccess: Bool
10+
public let challengeDate: String
11+
public let isSuccess: Bool
1212

1313
public init(challengeDate: String, isSuccess: Bool) {
1414
self.challengeDate = challengeDate

HMH_Tuist_iOS/Projects/Domain/Sources/Entity/Point/PointDetail.swift

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,35 @@ public struct PointDetail: Equatable {
1818
self.period = period
1919
self.pointStatuses = pointStatuses
2020
}
21+
22+
public func getPoint() -> Int {
23+
return point
24+
}
25+
26+
public func getPeriod() -> Int {
27+
return period
28+
}
29+
30+
public func getPointStatuses() -> [PointStatuse] {
31+
return pointStatuses
32+
}
2133
}
2234

2335
public struct PointStatuse: Equatable {
2436
let date: String
25-
let status: String
37+
let status: PointStatusEnum
2638

2739
public init(date: String, status: String) {
2840
self.date = date
29-
self.status = status
41+
self.status = PointStatusEnum(rawValue: status) ?? .none
42+
}
43+
44+
public func getDate() -> String {
45+
return date
46+
}
47+
48+
public func getStatus() -> PointStatusEnum {
49+
return status
3050
}
3151
}
3252

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//
2+
// PointStatusEnum.swift
3+
// Domain
4+
//
5+
// Created by 이지희 on 11/4/24.
6+
// Copyright © 2024 HMH-iOS. All rights reserved.
7+
//
8+
9+
import SwiftUI
10+
11+
import DSKit
12+
13+
public enum PointStatusEnum: String {
14+
case unearned = "UNEARNED"
15+
case earned = "EARNED"
16+
case failure = "FAILURE"
17+
case none = "NONE"
18+
19+
public var buttonColor: Color {
20+
switch self {
21+
case .unearned:
22+
return DSKitAsset.bluePurpleButton.swiftUIColor
23+
case .earned:
24+
return DSKitAsset.bluePurpleOpacity22.swiftUIColor
25+
case .failure:
26+
return DSKitAsset.gray6.swiftUIColor
27+
case .none:
28+
return DSKitAsset.gray7.swiftUIColor
29+
}
30+
}
31+
32+
public var titleColor: Color {
33+
switch self {
34+
case .unearned:
35+
return DSKitAsset.whiteBtn.swiftUIColor
36+
case .earned:
37+
return DSKitAsset.bluePurpleOpacity70.swiftUIColor
38+
case .failure:
39+
return DSKitAsset.gray2.swiftUIColor
40+
case .none:
41+
return DSKitAsset.gray3.swiftUIColor
42+
}
43+
}
44+
}

HMH_Tuist_iOS/Projects/Domain/Sources/RepositoryInterface/ChallengeRepositoryType.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Combine
1111

1212
public protocol ChallengeRepositoryType {
1313
func getdailyChallenge() -> AnyPublisher<DailyChallengeInfo, ChallengeError>
14-
func getSuccesChallenge() -> AnyPublisher<[String], ChallengeError>
14+
func postSuccesChallenge(sucessInfo: [ChallengeSuccessInfo]) -> AnyPublisher<[String], ChallengeError>
1515
func createChallenge(period: Int, goalTime: Int) -> AnyPublisher<Void, ChallengeError>
1616
func getLockChallenge() -> AnyPublisher<Bool, ChallengeError>
1717
func postLockChallenge() -> AnyPublisher<Void, ChallengeError>

0 commit comments

Comments
 (0)