Skip to content

Commit

Permalink
[Network] #91 - 게시물에 해당하는 답글 조회 API 호출 함수 구현 완료
Browse files Browse the repository at this point in the history
  • Loading branch information
boogios committed Jan 17, 2024
1 parent ab657e9 commit 2661909
Showing 1 changed file with 39 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,19 @@ final class PostViewModel: ViewModelType {
private let cancelBag = CancelBag()
private let networkProvider: NetworkServiceType
private var getPostData = PassthroughSubject<PostDetailResponseDTO, Never>()
private var getPostReplyData = PassthroughSubject<[PostReplyResponseDTO], Never>()

var postDetailData: [String] = []
var postReplyData: [PostReplyResponseDTO] = []

struct Input {
let viewUpdate: AnyPublisher<Int, Never>
let collectionViewUpdata: AnyPublisher<Int, Never>
}

struct Output {
let getPostData: PassthroughSubject<PostDetailResponseDTO, Never>
let getPostReplyData: PassthroughSubject<[PostReplyResponseDTO], Never>
}

func transform(from input: Input, cancelBag: CancelBag) -> Output {
Expand All @@ -42,7 +46,27 @@ final class PostViewModel: ViewModelType {
}
}
.store(in: self.cancelBag)
return Output(getPostData: getPostData)

input.collectionViewUpdata
.sink { value in
Task {
do {
if let accessToken = KeychainWrapper.loadToken(forKey: "accessToken") {
let postReplyResult = try await
self.getPostReplyDataAPI(accessToken: accessToken, contentId: value)
if let data = postReplyResult?.data {
self.postReplyData = data
self.getPostReplyData.send(data)
}
}
} catch {
print(error)
}
}
}
.store(in: self.cancelBag)

return Output(getPostData: getPostData, getPostReplyData: getPostReplyData)
}

init(networkProvider: NetworkServiceType) {
Expand All @@ -56,11 +80,23 @@ final class PostViewModel: ViewModelType {

extension PostViewModel {
private func getPostDetailDataAPI(accessToken: String, contentId: Int) async throws -> BaseResponse<PostDetailResponseDTO>? {
let accessToken = accessToken
do {
let result: BaseResponse<PostDetailResponseDTO>? = try
await self.networkProvider.donNetwork(type: .get, baseURL: Config.baseURL + "/content/\(contentId)/detail", accessToken: accessToken, body: EmptyBody(), pathVariables: ["":""])

return result
} catch {
return nil
}
}

private func getPostReplyDataAPI(accessToken: String, contentId: Int) async throws -> BaseResponse<[PostReplyResponseDTO]>? {
do {
let result: BaseResponse<[PostReplyResponseDTO]>? = try await
self.networkProvider.donNetwork(type: .get,
baseURL: Config.baseURL + "/content/\(contentId)/comment/all",
accessToken: accessToken,
body: EmptyBody(),
pathVariables: ["":""])
return result
} catch {
return nil
Expand Down

0 comments on commit 2661909

Please sign in to comment.