Skip to content

Commit 71794c9

Browse files
committed
refact :: [#118] 자습감독 Combine Refact
1 parent 3c89cd9 commit 71794c9

6 files changed

Lines changed: 26 additions & 43 deletions

File tree

Projects/Domain/CheckSelfStudyTeacher/Interface/CheckSelfStudyTeacherDomainInterface.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Combine
23

34
public protocol CheckSelfStudyTeacherDomainInterface {}
45

@@ -17,9 +18,9 @@ public struct SelfStudyTeacherEntity: Equatable, Identifiable {
1718
}
1819

1920
public protocol CheckSelfStudyTeacherRepository {
20-
func getSelfStudyTeacher(date: String) async throws -> [SelfStudyTeacherEntity]
21+
func getSelfStudyTeacher(date: String) -> AnyPublisher<[SelfStudyTeacherEntity], Error>
2122
}
2223

2324
public protocol FetchSelfStudyTeacherUseCaseProtocol {
24-
func execute(date: String) async throws -> [SelfStudyTeacherEntity]
25+
func execute(date: String) -> AnyPublisher<[SelfStudyTeacherEntity], Error>
2526
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
2+
import Combine
23

34
public protocol CheckSelfStudyTeacherDataSource {
4-
func getSelfStudyTeacher(date: String) async throws -> [SelfStudyTeacherResponseDTO]
5+
func getSelfStudyTeacher(date: String) -> AnyPublisher<[SelfStudyTeacherResponseDTO], Error>
56
}
Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,15 @@
11
import Foundation
2+
import Combine
23
import BaseDomain
34
import Core
4-
import Moya
55

6-
public class CheckSelfStudyTeacherDataSourceImpl: CheckSelfStudyTeacherDataSource {
7-
private let keychain: any Keychain
8-
private let provider: MoyaProvider<CheckSelfStudyTeacherAPI>
6+
public class CheckSelfStudyTeacherDataSourceImpl: BaseRemoteDataSource<CheckSelfStudyTeacherAPI>, CheckSelfStudyTeacherDataSource {
97

10-
public init(keychain: any Keychain) {
11-
self.keychain = keychain
12-
self.provider = MoyaProvider<CheckSelfStudyTeacherAPI>(plugins: [MoyaLoggingPlugin()])
13-
}
14-
15-
public func getSelfStudyTeacher(date: String) async throws -> [SelfStudyTeacherResponseDTO] {
16-
try await withCheckedThrowingContinuation { continuation in
17-
provider.request(.getSelfStudyTeacher(date: date)) { result in
18-
switch result {
19-
case .success(let response):
20-
do {
21-
let data = try response.map([SelfStudyTeacherResponseDTO].self)
22-
continuation.resume(returning: data)
23-
} catch {
24-
continuation.resume(throwing: error)
25-
}
26-
case .failure(let error):
27-
if let moyaError = error as? MoyaError,
28-
let code = moyaError.response?.statusCode,
29-
let errorMap = CheckSelfStudyTeacherAPI.getSelfStudyTeacher(date: date).errorMap,
30-
let mappedError = errorMap[code] {
31-
continuation.resume(throwing: mappedError)
32-
} else {
33-
continuation.resume(throwing: error)
34-
}
35-
}
8+
public func getSelfStudyTeacher(date: String) -> AnyPublisher<[SelfStudyTeacherResponseDTO], Error> {
9+
request(.getSelfStudyTeacher(date: date))
10+
.tryMap { response in
11+
try response.map([SelfStudyTeacherResponseDTO].self)
3612
}
37-
}
13+
.eraseToAnyPublisher()
3814
}
3915
}

Projects/Domain/CheckSelfStudyTeacher/Sources/Repository/CheckSelfStudyTeacherRepositoryImpl.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Combine
23
import CheckSelfStudyTeacherDomainInterface
34

45
public class CheckSelfStudyTeacherRepositoryImpl: CheckSelfStudyTeacherRepository {
@@ -8,8 +9,10 @@ public class CheckSelfStudyTeacherRepositoryImpl: CheckSelfStudyTeacherRepositor
89
self.dataSource = dataSource
910
}
1011

11-
public func getSelfStudyTeacher(date: String) async throws -> [SelfStudyTeacherEntity] {
12-
try await dataSource.getSelfStudyTeacher(date: date).map { $0.toEntity() }
12+
public func getSelfStudyTeacher(date: String) -> AnyPublisher<[SelfStudyTeacherEntity], Error> {
13+
dataSource.getSelfStudyTeacher(date: date)
14+
.map { $0.map { $0.toEntity() } }
15+
.eraseToAnyPublisher()
1316
}
1417
}
1518

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Combine
23
import CheckSelfStudyTeacherDomainInterface
34

45
public class FetchSelfStudyTeacherUseCase: FetchSelfStudyTeacherUseCaseProtocol {
@@ -8,7 +9,7 @@ public class FetchSelfStudyTeacherUseCase: FetchSelfStudyTeacherUseCaseProtocol
89
self.repository = repository
910
}
1011

11-
public func execute(date: String) async throws -> [SelfStudyTeacherEntity] {
12-
try await repository.getSelfStudyTeacher(date: date)
12+
public func execute(date: String) -> AnyPublisher<[SelfStudyTeacherEntity], Error> {
13+
repository.getSelfStudyTeacher(date: date)
1314
}
1415
}

Projects/Feature/CheckSelfStudyTeacherFeature/Sources/CheckSelfStudyTeacherReducer.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ComposableArchitecture
22
import CheckSelfStudyTeacherDomainInterface
33
import Foundation
4+
import Combine
45

56
public struct CheckSelfStudyTeacherReducer: Reducer {
67
private let fetchSelfStudyTeacherUseCase: any FetchSelfStudyTeacherUseCaseProtocol
@@ -40,11 +41,11 @@ public struct CheckSelfStudyTeacherReducer: Reducer {
4041

4142
case let .fetchSelfStudyTeacher(date):
4243
state.isLoading = true
43-
return .run { send in
44-
let result = await TaskResult {
45-
try await fetchSelfStudyTeacherUseCase.execute(date: date)
46-
}
47-
await send(.selfStudyTeacherResponse(Result(result)))
44+
return .publisher {
45+
fetchSelfStudyTeacherUseCase.execute(date: date)
46+
.mapError { $0 as Error }
47+
.map { Action.selfStudyTeacherResponse(.success($0)) }
48+
.catch { Just(Action.selfStudyTeacherResponse(.failure($0))) }
4849
}
4950

5051
case let .selfStudyTeacherResponse(.success(teachers)):

0 commit comments

Comments
 (0)