Skip to content

Commit f142133

Browse files
committed
✨ [feat] 게시글에 계정신고 로직 추가 구현
1 parent cf4a8a5 commit f142133

File tree

10 files changed

+93
-45
lines changed

10 files changed

+93
-45
lines changed

Fitfty/Projects/Common/Sources/ReportType.swift renamed to Fitfty/Projects/Common/Sources/ReportPresentType.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88

99
import Foundation
1010

11-
public enum ReportType {
11+
public enum ReportPresentType {
1212
case userReport
1313
case postUserReport
1414
}
15+
16+
public enum ReportType {
17+
case userReport
18+
case postReport
19+
}

Fitfty/Projects/Coordinator/Sources/Profile/DetailReportCoordinator.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import Core
1515
final class DetailReportCoordinator: Coordinator {
1616

1717
var type: CoordinatorType { .detailReport }
18-
var reportedToken: String
18+
var userToken: String?
19+
var boardToken: String?
1920
var reportType: ReportType
2021

2122
weak var finishDelegate: CoordinatorFinishDelegate?
@@ -27,11 +28,13 @@ final class DetailReportCoordinator: Coordinator {
2728

2829
init(
2930
navigationController: BaseNavigationController = BaseNavigationController(),
30-
reportedToken: String,
31-
reportType: ReportType
31+
reportType: ReportType,
32+
boardToken: String?,
33+
userToken: String?
3234
) {
3335
self.navigationController = navigationController
34-
self.reportedToken = reportedToken
36+
self.userToken = userToken
37+
self.boardToken = boardToken
3538
self.reportType = reportType
3639
}
3740

@@ -49,7 +52,8 @@ private extension DetailReportCoordinator {
4952
coordinator: self,
5053
viewModel: DetailReportViewModel(
5154
userManager: DefaultUserManager.shared,
52-
reportedToken: reportedToken,
55+
userToken: userToken,
56+
boardToken: boardToken,
5357
reportType: reportType,
5458
fitftyRepository: DefaultFitftyRepository()
5559
)

Fitfty/Projects/Coordinator/Sources/Profile/PostCoordinator.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,11 @@ private extension PostCoordinator {
9191
return coordinator
9292
}
9393

94-
func makeReportViewController(reportedToken: String) -> UIViewController {
94+
func makeReportViewController(userToken: String, boardToken: String) -> UIViewController {
9595
let coordinator = ReportCoordinator(
96-
reportType: .postUserReport,
97-
reportedToken: reportedToken
96+
reportPresentType: .postUserReport,
97+
boardToken: boardToken,
98+
userToken: userToken
9899
)
99100
coordinator.parentCoordinator = self
100101
childCoordinators.append(coordinator)
@@ -132,8 +133,8 @@ extension PostCoordinator: PostCoordinatorInterface {
132133
navigationController.present(coordinator.navigationController, animated: true)
133134
}
134135

135-
func showReport(reportedToken: String) {
136-
let viewController = makeReportViewController(reportedToken: reportedToken)
136+
func showReport(userToken: String, boardToken: String) {
137+
let viewController = makeReportViewController(userToken: userToken, boardToken: boardToken)
137138
viewController.modalPresentationStyle = .overFullScreen
138139
navigationController.present(viewController, animated: false)
139140
}

Fitfty/Projects/Coordinator/Sources/Profile/ProfileCoordinator.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,7 @@ private extension ProfileCoordinator {
8989
}
9090

9191
func makeReportViewController(reportedToken: String) -> UIViewController {
92-
let coordinator = ReportCoordinator(
93-
reportType: .userReport,
94-
reportedToken: reportedToken
95-
)
92+
let coordinator = ReportCoordinator(reportPresentType: .userReport, boardToken: nil, userToken: reportedToken)
9693
coordinator.parentCoordinator = self
9794
childCoordinators.append(coordinator)
9895
coordinator.start()

Fitfty/Projects/Coordinator/Sources/Profile/ReportCoordinator.swift

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ import Common
1414
final class ReportCoordinator: Coordinator {
1515

1616
var type: CoordinatorType { .report }
17-
var reportType: ReportType
18-
var reportedToken: String
17+
var reportPresentType: ReportPresentType
18+
var userToken: String?
19+
var boardToken: String?
1920

2021
weak var finishDelegate: CoordinatorFinishDelegate?
2122
weak var bottomSheetDelegate: BottomSheetViewControllerDelegate?
@@ -26,33 +27,41 @@ final class ReportCoordinator: Coordinator {
2627

2728
init(
2829
navigationController: BaseNavigationController = BaseNavigationController(),
29-
reportType: ReportType,
30-
reportedToken: String
30+
reportPresentType: ReportPresentType,
31+
boardToken: String?,
32+
userToken: String?
3133
) {
3234
self.navigationController = navigationController
33-
self.reportType = reportType
34-
self.reportedToken = reportedToken
35+
self.reportPresentType = reportPresentType
36+
self.userToken = userToken
37+
self.boardToken = boardToken
3538
}
3639

3740
func start() {
38-
let viewController = makeReportViewController(reportType: reportType)
41+
let viewController = makeReportViewController(
42+
reportPresentType: reportPresentType,
43+
userToken: userToken,
44+
boardToken: boardToken
45+
)
3946
navigationController.pushViewController(viewController, animated: true)
4047
navigationController.setNavigationBarHidden(true, animated: false)
4148
}
4249
}
4350

4451
private extension ReportCoordinator {
4552

46-
func makeReportViewController(reportType: ReportType) -> UIViewController {
53+
func makeReportViewController(reportPresentType: ReportPresentType, userToken: String?, boardToken: String?) -> UIViewController {
4754
let viewController = ReportViewController(
4855
coordinator: self,
49-
reportType: reportType
56+
reportPresentType: reportPresentType,
57+
userToken: userToken,
58+
boardToken: boardToken
5059
)
5160
return viewController
5261
}
5362

54-
func makeDetailReportViewController() -> UIViewController {
55-
let coordinator = DetailReportCoordinator(reportedToken: reportedToken, reportType: reportType)
63+
func makeDetailReportViewController(reportType: ReportType, userToken: String?, boardToken: String?) -> UIViewController {
64+
let coordinator = DetailReportCoordinator(reportType: reportType, boardToken: boardToken, userToken: userToken)
5665
coordinator.parentCoordinator = self
5766
childCoordinators.append(coordinator)
5867
coordinator.start()
@@ -70,8 +79,8 @@ private extension ReportCoordinator {
7079

7180
extension ReportCoordinator: ReportCoordinatorInterface {
7281

73-
func showDetailReport() {
74-
let viewController = makeDetailReportViewController()
82+
func showDetailReport(_ reportType: ReportType, userToken: String?, boardToken: String?) {
83+
let viewController = makeDetailReportViewController(reportType: reportType, userToken: userToken, boardToken: boardToken)
7584
viewController.modalPresentationStyle = .overFullScreen
7685
navigationController.present(viewController, animated: false)
7786
}

Fitfty/Projects/Profile/Sources/CoordinatorInterfaces/PostCoordinatorInterface.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public protocol PostCoordinatorInterface: AnyObject {
1414
func showProfile(profileType: ProfileType, nickname: String)
1515
func showBottomSheet(boardToken: String, filepath: String)
1616
func showModifyMyFitfty(boardToken: String)
17-
func showReport(reportedToken: String)
17+
func showReport(userToken: String, boardToken: String)
1818
func dismiss()
1919
func popToRoot()
2020
func finished()

Fitfty/Projects/Profile/Sources/CoordinatorInterfaces/ReportCoordinatorInterface.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
//
88

99
import Foundation
10+
import Common
1011

1112
public protocol ReportCoordinatorInterface: AnyObject {
1213

13-
func showDetailReport()
14+
func showDetailReport(_ reportType: ReportType, userToken: String?, boardToken: String?)
1415
func dismiss()
1516

1617
}

Fitfty/Projects/Profile/Sources/Post/ViewControllers/PostViewController.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ final public class PostViewController: UIViewController {
1818
private var cancellables: Set<AnyCancellable> = .init()
1919
private var viewModel: PostViewModel
2020
private var boardToken: String
21+
private var userToken: String?
2122
private var filepath: String?
2223

2324
private let postView = PostView()
@@ -137,6 +138,7 @@ final public class PostViewController: UIViewController {
137138
)
138139
self.nickname = data.nickname
139140
self.filepath = data.filePath
141+
self.userToken = data.userToken
140142
}
141143

142144
private func setNavigationBar() {
@@ -205,7 +207,10 @@ final public class PostViewController: UIViewController {
205207
case .myProfile:
206208
coordinator.showBottomSheet(boardToken: boardToken, filepath: filepath)
207209
case .userProfile:
208-
coordinator.showReport(reportedToken: boardToken)
210+
guard let userToken = userToken else {
211+
return
212+
}
213+
coordinator.showReport(userToken: userToken, boardToken: boardToken)
209214
}
210215

211216
}

Fitfty/Projects/Profile/Sources/Report/ViewControllers/ReportViewController.swift

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@ import Common
1212
final public class ReportViewController: UIViewController {
1313

1414
let coordinator: ReportCoordinatorInterface
15-
let reportType: ReportType
15+
let reportPresentType: ReportPresentType
16+
var userToken: String?
17+
var boardToken: String?
1618

1719
private lazy var userReportButton: UIButton = {
1820
let button = UIButton()
1921
button.setTitleColor(CommonAsset.Colors.error.color, for: .normal)
2022
button.setTitle("계정 신고", for: .normal)
2123
button.titleLabel?.font = FitftyFont.appleSDSemiBold(size: 18).font
2224
button.contentHorizontalAlignment = .left
23-
button.addTarget(self, action: #selector(didTapReportButton), for: .touchUpInside)
25+
button.addTarget(self, action: #selector(didTapUserReportButton), for: .touchUpInside)
2426
return button
2527
}()
2628

@@ -36,9 +38,16 @@ final public class ReportViewController: UIViewController {
3638
setUp()
3739
}
3840

39-
public init(coordinator: ReportCoordinatorInterface, reportType: ReportType) {
41+
public init(
42+
coordinator: ReportCoordinatorInterface,
43+
reportPresentType: ReportPresentType,
44+
userToken: String?,
45+
boardToken: String?
46+
) {
4047
self.coordinator = coordinator
41-
self.reportType = reportType
48+
self.reportPresentType = reportPresentType
49+
self.userToken = userToken
50+
self.boardToken = boardToken
4251
super.init(nibName: nil, bundle: nil)
4352
}
4453

@@ -48,11 +57,11 @@ final public class ReportViewController: UIViewController {
4857

4958
private func setUp() {
5059
setConstraintsLayout()
51-
myPostBottomSheetView.setUpUserPost()
60+
5261
}
5362

5463
private func setConstraintsLayout() {
55-
switch reportType {
64+
switch reportPresentType {
5665
case .userReport:
5766
view.addSubviews(userReportButton)
5867
NSLayoutConstraint.activate([
@@ -67,11 +76,19 @@ final public class ReportViewController: UIViewController {
6776
myPostBottomSheetView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
6877
myPostBottomSheetView.topAnchor.constraint(equalTo: view.topAnchor, constant: 40)
6978
])
79+
myPostBottomSheetView.setUpUserPost()
80+
myPostBottomSheetView.setActionFirstButton(self, action: #selector(didTapUserReportButton))
81+
myPostBottomSheetView.setActionSecondButton(self, action: #selector(didTapPostReportButton))
7082
}
7183

7284
}
7385

74-
@objc func didTapReportButton(_ sender: Any?) {
75-
coordinator.showDetailReport()
86+
@objc func didTapUserReportButton(_ sender: Any?) {
87+
coordinator.showDetailReport(.userReport, userToken: userToken, boardToken: boardToken)
7688
}
89+
90+
@objc func didTapPostReportButton(_ sender: Any?) {
91+
coordinator.showDetailReport(.postReport, userToken: userToken, boardToken: boardToken)
92+
}
93+
7794
}

Fitfty/Projects/Profile/Sources/Report/ViewModel/DetailReportViewModel.swift

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public final class DetailReportViewModel {
2424
private var currentState: CurrentValueSubject<ViewModelState?, Never> = .init(nil)
2525
private var cancellables: Set<AnyCancellable> = .init()
2626
private var userManager: UserManager
27-
private var reportedToken: String
27+
private var userToken: String?
28+
private var boardToken: String?
2829
private var reportType: ReportType
2930
private var fitftyRepository: FitftyRepository
3031
private var reports: [(detailReportType: DetailReportType, isSelected: Bool)] = [
@@ -38,12 +39,14 @@ public final class DetailReportViewModel {
3839

3940
public init(
4041
userManager: UserManager,
41-
reportedToken: String,
42+
userToken: String?,
43+
boardToken: String?,
4244
reportType: ReportType,
4345
fitftyRepository: FitftyRepository
4446
) {
4547
self.userManager = userManager
46-
self.reportedToken = reportedToken
48+
self.userToken = userToken
49+
self.boardToken = boardToken
4750
self.reportType = reportType
4851
self.fitftyRepository = fitftyRepository
4952
}
@@ -122,9 +125,12 @@ private extension DetailReportViewModel {
122125
}
123126
do {
124127
switch reportType {
125-
case .postUserReport:
128+
case .postReport:
129+
guard let boardToken = boardToken else {
130+
return
131+
}
126132
let request = PostReportRequest(
127-
reportedBoardToken: self.reportedToken,
133+
reportedBoardToken: boardToken,
128134
type: getSelectedReport()
129135
)
130136
let response = try await self.fitftyRepository.report(request)
@@ -134,8 +140,11 @@ private extension DetailReportViewModel {
134140
self.currentState.send(.completed(true))
135141

136142
case .userReport:
143+
guard let userToken = userToken else {
144+
return
145+
}
137146
let request = UserReportRequest(
138-
reportedUserToken: self.reportedToken,
147+
reportedUserToken: userToken,
139148
type: getSelectedReport()
140149
)
141150
let response = try await self.fitftyRepository.report(request)

0 commit comments

Comments
 (0)