Skip to content

Commit 02a184d

Browse files
authored
[Merge] #212 - 댓글 신고 모달, 댓글 삭제구현
2 parents cd76f37 + a4d9325 commit 02a184d

22 files changed

Lines changed: 486 additions & 15 deletions

File tree

CERTI-iOS/Application/DIContainer/AppDIContainer.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ final class AppDIContainer {
2727
private lazy var acquisitionService: AcquisitionServiceProtocol = AcquisitionService()
2828
private lazy var careersService: CareersServiceProtocol = CareersService()
2929
private lazy var activityService: ActivityServiceProtocol = ActivityService()
30+
private lazy var reportService: ReportServiceProtocol = ReportService()
3031
private lazy var commentService: CommentServiceProtocol = CommentService()
3132

3233
// MARK: - Repositories
@@ -42,6 +43,7 @@ final class AppDIContainer {
4243
private lazy var careersRepository: CareersRepository = DefaultCareersRepository(service: careersService)
4344
private lazy var activityRepository: ActivityRepository = DefaultActivityRepository(service: activityService)
4445
private lazy var commentRepository: CommentRepository = DefaultCommentRepository(service: commentService)
46+
private lazy var ReportRepository: ReportRepository = DefaultReportRepository(service: reportService)
4547
}
4648

4749

@@ -248,6 +250,10 @@ extension AppDIContainer {
248250
return DefaultLikeCommentUseCase(repository: commentRepository)
249251
}
250252

253+
func makeReportCommentUserCase() -> ReportCommentUseCase {
254+
return DefaultReportCommentUseCase(repository: ReportRepository)
255+
}
256+
251257
func makeEditAcquisitionUseCase() -> EditAcquisitionUseCase {
252258
return DefaultEditAcquisitionUseCase(repository: acquisitionRepository)
253259
}
@@ -291,7 +297,8 @@ extension AppDIContainer {
291297
fetchCommentUseCase: makeFetchCommentUseCase(),
292298
addCommentUseCase: makeAddCommentUseCase(),
293299
deleteCommentUseCase: makeDeleteCommentUseCase(),
294-
likeCommentUseCase: makeLikeCommentUseCase()
300+
likeCommentUseCase: makeLikeCommentUseCase(),
301+
reportCommentUseCase: makeReportCommentUserCase()
295302
)
296303
}
297304

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//
2+
// ReportAPI.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
import Moya
11+
12+
enum ReportAPI {
13+
case reportComment(commentId: Int, request: ReportCommentRequestDTO)
14+
}
15+
16+
extension ReportAPI: BaseTargetType {
17+
var headerType: HeaderType {
18+
switch self {
19+
default:
20+
return .accessTokenHeader
21+
}
22+
}
23+
24+
var path: String {
25+
switch self {
26+
case .reportComment(let commentId, _):
27+
return "report/comment/\(commentId)"
28+
}
29+
}
30+
31+
var method: Moya.Method {
32+
switch self {
33+
case .reportComment:
34+
return .post
35+
}
36+
}
37+
38+
var task: Moya.Task {
39+
switch self {
40+
case .reportComment(_, let request):
41+
return .requestJSONEncodable(request)
42+
}
43+
}
44+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// ReportService.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
import Moya
11+
12+
protocol ReportServiceProtocol {
13+
func reportComment(commentId: Int, request: ReportCommentRequestDTO) async -> Result<Void, NetworkError>
14+
}
15+
16+
final class ReportService: BaseService, ReportServiceProtocol {
17+
private let provider = MoyaProvider<ReportAPI>.init(plugins: [MoyaPlugin()])
18+
19+
func reportComment(commentId: Int, request: ReportCommentRequestDTO) async -> Result<Void, NetworkError> {
20+
return await requestVoid(provider, .reportComment(commentId: commentId, request: request))
21+
}
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// ReportCommentRequestDTO.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
struct ReportCommentRequestDTO: Encodable {
11+
let content: String?
12+
let shouldBlockUser: Bool
13+
}

CERTI-iOS/Data/Network/User/DTO/Response/UserInfoResponseDTO.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ struct UserInfoData: Decodable {
2424
extension UserInfoData {
2525
func toUserInfoEntity() -> UserInfoEntity {
2626
return UserInfoEntity(
27+
userId: userId,
2728
name: name,
2829
nickname: nickname,
2930
university: university,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// DefaultReportRepository.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
import Moya
11+
12+
final class DefaultReportRepository: ReportRepository {
13+
private let service: ReportServiceProtocol
14+
15+
public init(service: ReportServiceProtocol) {
16+
self.service = service
17+
}
18+
19+
func reportComment(commentId: Int, request: ReportCommentEntity) async -> Result<Void, NetworkError> {
20+
let requestDTO = request.toReportCommentRequestDTO()
21+
return await service.reportComment(commentId: commentId, request: requestDTO)
22+
}
23+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// ReportCommentEntity.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
struct ReportCommentEntity {
11+
let content: String?
12+
let shouldBlockUser: Bool
13+
}
14+
15+
// MARK: - Func
16+
17+
extension ReportCommentEntity {
18+
func toReportCommentRequestDTO() -> ReportCommentRequestDTO {
19+
return ReportCommentRequestDTO(content: content, shouldBlockUser: shouldBlockUser)
20+
}
21+
}

CERTI-iOS/Domain/Entities/UserInfoEntity.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import Foundation
99

1010
struct UserInfoEntity {
11+
let userId: Int
1112
let name: String
1213
let nickname: String
1314
let university: String
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// ReportRepository.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
import Moya
11+
12+
protocol ReportRepository {
13+
func reportComment(commentId: Int, request: ReportCommentEntity) async -> Result<Void, NetworkError>
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// ReportCommentUseCase.swift
3+
// CERTI-iOS
4+
//
5+
// Created by 이상엽 on 2/11/26.
6+
//
7+
8+
import Foundation
9+
10+
protocol ReportCommentUseCase {
11+
func execute(commentId: Int, request: ReportCommentEntity) async -> Result<Void, NetworkError>
12+
}
13+
14+
final class DefaultReportCommentUseCase: ReportCommentUseCase {
15+
private let repository: ReportRepository
16+
17+
init(repository: ReportRepository) {
18+
self.repository = repository
19+
}
20+
21+
func execute(commentId: Int, request: ReportCommentEntity) async -> Result<Void, NetworkError> {
22+
return await repository.reportComment(commentId: commentId, request: request)
23+
}
24+
}

0 commit comments

Comments
 (0)