Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x61",
"green" : "0x42",
"red" : "0xEC"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xC2",
"green" : "0xB5",
"red" : "0xFA"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
141 changes: 141 additions & 0 deletions Qapple/Qapple/SourceCode/Data/Repository/AnswerCommentRepository.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
//
// AnswerCommentRepository.swift
// Qapple
//
// Created by 문인범 on 5/20/25.
//

import ComposableArchitecture
import QappleRepository
import Foundation


/**
AnswerComment API 의존성
*/
struct AnswerCommentRepository {
var fetchAnswerComments: (_ answerId: Int) async throws -> [AnswerComment]
var createAnswerComment: (_ answerId: Int, _ content: String) async throws -> Void
var likeAnswerComment: (_ answerCommentId: Int) async throws -> Void
var deleteAnswerComment: (_ answerCommentId: Int) async throws -> Void
}


// MARK: - DependencyKey
extension AnswerCommentRepository: DependencyKey {
static let liveValue: AnswerCommentRepository = Self(
fetchAnswerComments: { answerId in
let response = try await RepositoryService.shared.request { server, accessToken in
try await AnswerCommentAPI.fetchAnswerComments(
answerId: answerId,
server: server,
accessToken: accessToken
)
}

let list = response.answerCommentInfos.map {
AnswerComment(
id: $0.answerCommentId,
writeId: $0.writerId,
// TODO: 5/20 문의 필요(writer generation, isLiked, isMine, isReport이 있는지 여부)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

체크 좋슴니다!

writerGeneration: "",
content: $0.content,
heartCount: $0.heartCount,
isLiked: false,
isMine: false,
isReport: false,
createdAt: $0.createdAt.ISO8601ToDate(.yearMonthDateTimeMilliseconds),
anonymityId: -2
)
}

return list
},
createAnswerComment: { answerId, content in
let _ = try await RepositoryService.shared.request { server, accessToken in
try await AnswerCommentAPI.createAnswerComment(
answerId: answerId,
content: content,
server: server,
accessToken: accessToken
)
}
},
likeAnswerComment: { answerCommentId in
let _ = try await RepositoryService.shared.request { server, accessToken in
try await AnswerCommentAPI.likeAnswerComment(
answerCommentId: answerCommentId,
server: server,
accessToken: accessToken
)
}
},
deleteAnswerComment: { answerCommentId in
let _ = try await RepositoryService.shared.request { server, accessToken in
try await AnswerCommentAPI.deleteAnswerComment(
answerCommentId: answerCommentId,
server: server,
accessToken: accessToken
)
}
}
)

static let previewValue: AnswerCommentRepository = .init(
fetchAnswerComments: { _ in
sampleComments
},
createAnswerComment: { answerId, content in
print("\(answerId) 게시글에 \"\(content)\" 댓글을 작성했습니다.")
},
likeAnswerComment: { answerCommentId in
print("\(answerCommentId) 댓글에 좋아요를 눌렀습니다.")
},
deleteAnswerComment: { answerCommentId in
print("\(answerCommentId) 댓글을 삭제했습니다.")
}
)

static let testValue: AnswerCommentRepository = .init(
fetchAnswerComments: { _ in
sampleComments
},
createAnswerComment: { _, _ in },
likeAnswerComment: { _ in },
deleteAnswerComment: { _ in }
)
}


// MARK: DependencyValues
extension DependencyValues {
var answerCommentRepository: AnswerCommentRepository {
get { self[AnswerCommentRepository.self] }
set { self[AnswerCommentRepository.self] = newValue }
}
}


// MARK: Test Values
extension AnswerCommentRepository {
private static let sampleComments: [AnswerComment] = {
var result = [AnswerComment]()
for i in 1...10 {
result.append(
AnswerComment(
id: i,
writeId: i,
writerGeneration: "4기",
content: "테스트 댓글\(i)",
heartCount: i,
isLiked: i == 1,
isMine: i == 2,
isReport: i == 3,
createdAt: .now,
anonymityId: -2
)
)
}
return result
}()
}
Loading