Skip to content

Commit fc4390c

Browse files
committed
[Rebuild] add subscribeAndRequest(on:) to delete duplicated operator calls
1 parent c69dff8 commit fc4390c

2 files changed

Lines changed: 36 additions & 34 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Combine+Helpers.swift
3+
//
4+
//
5+
// Created by 양승현 on 5/8/24.
6+
//
7+
8+
import Foundation
9+
10+
#if canImport(Combine) && os(iOS) && swift(>=5.0)
11+
import Combine
12+
13+
internal extension Publisher {
14+
func subscribeAndReceive(
15+
on queue: DispatchQueue
16+
) -> Publishers.ReceiveOn<Publishers.SubscribeOn<Self, DispatchQueue>, DispatchQueue> {
17+
return self.subscribe(on: queue).receive(on: queue)
18+
}
19+
}
20+
#endif

Sources/SHFirestoreService/FirestoreService.swift

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ extension FirestoreService: FirestoreServiceProtocol {
4242
}
4343
if case .get = endpoint.method {
4444
return collectionRef.getDocuments()
45-
.subscribe(on: backgroundQueue)
46-
.receive(on: backgroundQueue)
45+
.subscribeAndReceive(on: backgroundQueue)
4746
.tryMap { snapshots in
4847
if snapshots.isEmpty {
4948
return []
@@ -69,8 +68,7 @@ extension FirestoreService: FirestoreServiceProtocol {
6968
}
7069
if case .get = endpoint.method {
7170
return documentRef.getDocument()
72-
.subscribe(on: backgroundQueue)
73-
.receive(on: backgroundQueue)
71+
.subscribeAndReceive(on: backgroundQueue)
7472
.tryMap { snapshot in
7573
try snapshot.data(as: D.self)
7674
}
@@ -96,8 +94,7 @@ extension FirestoreService: FirestoreServiceProtocol {
9694
}
9795

9896
return collectionRef.getDocuments()
99-
.subscribe(on: backgroundQueue)
100-
.receive(on: backgroundQueue)
97+
.subscribeAndReceive(on: backgroundQueue)
10198
.mapError { error in
10299
FirestoreServiceError.documentsNotFound(error)
103100
}.map { snapshot in
@@ -112,8 +109,7 @@ extension FirestoreService: FirestoreServiceProtocol {
112109

113110
if case .delete = endpoint.method {
114111
return documentRef.delete()
115-
.subscribe(on: backgroundQueue)
116-
.receive(on: backgroundQueue)
112+
.subscribeAndReceive(on: backgroundQueue)
117113
.convertFirestoreServiceError()
118114
.eraseToAnyPublisher()
119115
}
@@ -123,8 +119,7 @@ extension FirestoreService: FirestoreServiceProtocol {
123119
if let requestDTODictionary = endpoint.requestDTODictionary {
124120
return documentRef
125121
.updateData(requestDTODictionary)
126-
.subscribe(on: backgroundQueue)
127-
.receive(on: backgroundQueue)
122+
.subscribeAndReceive(on: backgroundQueue)
128123
.convertFirestoreServiceError()
129124
.eraseToAnyPublisher()
130125
}
@@ -134,8 +129,7 @@ extension FirestoreService: FirestoreServiceProtocol {
134129
let requestDictionary = try requestDTO.toDictionary()
135130
return documentRef
136131
.updateData(requestDictionary)
137-
.subscribe(on: backgroundQueue)
138-
.receive(on: backgroundQueue)
132+
.subscribeAndReceive(on: backgroundQueue)
139133
.convertFirestoreServiceError()
140134
.eraseToAnyPublisher()
141135
} catch {
@@ -172,16 +166,14 @@ extension FirestoreService: FirestoreServiceProtocol {
172166
return collectionRef
173167
.document(documentId)
174168
.setData(requestDTODictionary)
175-
.subscribe(on: backgroundQueue)
176-
.receive(on: backgroundQueue)
169+
.subscribeAndReceive(on: backgroundQueue)
177170
.convertFirestoreServiceError()
178171
.map { _ in return documentId }
179172
.eraseToAnyPublisher()
180173
} else {
181174
return collectionRef
182175
.addDocument(data: requestDTODictionary)
183-
.subscribe(on: backgroundQueue)
184-
.receive(on: backgroundQueue)
176+
.subscribeAndReceive(on: backgroundQueue)
185177
.map { $0.documentID }
186178
.convertFirestoreServiceError()
187179
.eraseToAnyPublisher()
@@ -194,16 +186,14 @@ extension FirestoreService: FirestoreServiceProtocol {
194186
return collectionRef
195187
.document(documentId)
196188
.setData([:])
197-
.subscribe(on: backgroundQueue)
198-
.receive(on: backgroundQueue)
189+
.subscribeAndReceive(on: backgroundQueue)
199190
.convertFirestoreServiceError()
200191
.map { _ in return documentId }
201192
.eraseToAnyPublisher()
202193
} else {
203194
return collectionRef
204195
.addDocument(data: [:])
205-
.subscribe(on: backgroundQueue)
206-
.receive(on: backgroundQueue)
196+
.subscribeAndReceive(on: backgroundQueue)
207197
.map { $0.documentID }
208198
.convertFirestoreServiceError()
209199
.eraseToAnyPublisher()
@@ -214,8 +204,7 @@ extension FirestoreService: FirestoreServiceProtocol {
214204
return collectionRef
215205
.document(documentId)
216206
.setData(from: requestDTO)
217-
.subscribe(on: backgroundQueue)
218-
.receive(on: backgroundQueue)
207+
.subscribeAndReceive(on: backgroundQueue)
219208
.map { _ in return documentId }
220209
.convertFirestoreServiceError()
221210
.eraseToAnyPublisher()
@@ -224,8 +213,7 @@ extension FirestoreService: FirestoreServiceProtocol {
224213
/// If the document ID is not specified, the document is created using Firestore's automatic document ID assignment.
225214
return collectionRef
226215
.addDocument(from: requestDTO)
227-
.subscribe(on: backgroundQueue)
228-
.receive(on: backgroundQueue)
216+
.subscribeAndReceive(on: backgroundQueue)
229217
.map { $0.documentID }
230218
.convertFirestoreServiceError()
231219
.eraseToAnyPublisher()
@@ -248,8 +236,7 @@ extension FirestoreService: FirestoreServiceProtocol {
248236
return Fail(error: FirestoreServiceError.collectionNotFound).eraseToAnyPublisher()
249237
}
250238
return collectionRef.getDocuments()
251-
.subscribe(on: backgroundQueue)
252-
.receive(on: backgroundQueue)
239+
.subscribeAndReceive(on: backgroundQueue)
253240
.map { snapshots in
254241
if snapshots.isEmpty { return [] }
255242
return snapshots.documents.map { documentSnapshot in documentSnapshot.documentID }
@@ -278,8 +265,7 @@ extension FirestoreService: FirestoreQueryable {
278265
do {
279266
let query = try makeQuery(collectionRef)
280267
return query.getDocuments()
281-
.subscribe(on: backgroundQueue)
282-
.receive(on: backgroundQueue)
268+
.subscribeAndReceive(on: backgroundQueue)
283269
.tryMap { querySnapshot in
284270
try querySnapshot.documents.map { snapshot in
285271
try snapshot.data(as: D.self)
@@ -361,10 +347,7 @@ extension FirestoreService: FirestoreQueryable {
361347
promise(.failure(FirestoreServiceError.decodingError(error)))
362348
}
363349
}
364-
}
365-
.subscribe(on: backgroundQueue)
366-
.receive(on: backgroundQueue)
367-
.eraseToAnyPublisher()
350+
}.eraseToAnyPublisher()
368351
}
369352
}
370353

@@ -377,8 +360,7 @@ extension FirestoreService: FirestoreTransactional {
377360
) -> AnyPublisher<Any?, any Error> {
378361
return Firestore.firestore()
379362
.runTransaction(updateBlock)
380-
.subscribe(on: backgroundQueue)
381-
.receive(on: backgroundQueue)
363+
.subscribeAndReceive(on: backgroundQueue)
382364
.mapError { error in
383365
return FirestoreServiceError.failedTransaction(error)
384366
}.eraseToAnyPublisher()

0 commit comments

Comments
 (0)