-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat [#105] 404 페이지 구현 및 답글에서 프로필 클릭시 유저페이지로 이동 및 유저 투명도에 따른 글쓰기 분기처리 #110
Changes from 4 commits
cc5ee20
0ce2980
1042f21
e4a4bd3
ec3d94b
a43648d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,6 +13,7 @@ enum ImageLiterals { | |
static var logoSymbol: UIImage { .load(name: "logo_symbol") } | ||
static var imgProfile: UIImage { .load(name: "img_profile") } | ||
static var btnBackGray: UIImage { .load(name: "btn_back_gray") } | ||
static var img404: UIImage { .load(name: "img_404") } | ||
} | ||
|
||
enum TabBar { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 수정 내용:
버그 위험:
개선 제안:
추가로, 코드 리뷰를 더 정확하게 할 수 있도록 전체 코드 및 관련 문맥을 제공해 주시면 감사하겠습니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -59,6 +59,7 @@ enum StringLiterals { | |
static let later = "한 줄 소개 나중에 작성하기" | ||
static let finish = "완료하기" | ||
static let editFinish = "수정완료" | ||
static let goHome = "홈으로 가기" | ||
} | ||
|
||
enum Toast { | ||
|
@@ -143,5 +144,6 @@ enum StringLiterals { | |
static let baseImageURL = "https://github.com/TeamDon-tBe/SERVER/assets/97835512/fb3ea04c-661e-4221-a837-854d66cdb77e" | ||
static let notificationImageURL = "https://github.com/TeamDon-tBe/SERVER/assets/128011308/327d416e-ef1f-4c10-961d-4d9b85632d87" | ||
static let warnUserGoogleFormURL = "https://forms.gle/FTgZKkajwtzFvAk99" | ||
static let errorMessage = "이런!\n현재 요청하신 페이지를 찾을 수 없어요!" | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 리뷰를 해드리겠습니다. 여기에 나와 있는 코드 패치에 대한 간단한 리뷰입니다:
전반적으로, 주어진 코드 패치는 안전하고 예상되는 동작 작업을 위한 문자열 상수들을 추가하고 있습니다. 추가된 내용은 잘못된 점이 없으며, 안정성을 유지하기 위해 앱 컨텍스트와 일치하는지 확인하는 것이 좋습니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"filename" : "img_404.png", | ||
"idiom" : "universal", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"filename" : "[email protected]", | ||
"idiom" : "universal", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"filename" : "[email protected]", | ||
"idiom" : "universal", | ||
"scale" : "3x" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 코드는 Xcode에서 사용하는 이미지 정보를 정의하는 JSON 형식의 파일입니다. 버그 위험은 존재하지 않습니다.
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -92,7 +92,13 @@ final class NetworkService: NetworkServiceType { | |
|
||
print("👻👻👻👻👻 토큰 재발급 👻👻👻👻👻") | ||
return try await donNetwork(type: type, baseURL: baseURL, accessToken: newAccessToken, body: body, pathVariables: pathVariables) | ||
case 404 : | ||
case 404: | ||
if let sceneDelegate = await UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate { | ||
DispatchQueue.main.async { | ||
let viewController = ErrorViewController() | ||
sceneDelegate.window?.rootViewController = UINavigationController(rootViewController: viewController) | ||
} | ||
} | ||
throw NetworkError.notFoundError | ||
case 500: | ||
throw NetworkError.internalServerError | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치에 대한 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험과 개선 제안을 환영합니다:
그 외에는 코드에 큰 문제가 없어보입니다. 이 코드 리뷰를 참고하여 수정 및 개선을 진행하시면 됩니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
// | ||
// ErrorViewController.swift | ||
// DontBe-iOS | ||
// | ||
// Created by 변희주 on 1/18/24. | ||
// | ||
|
||
import UIKit | ||
|
||
import SnapKit | ||
|
||
final class ErrorViewController: UIViewController { | ||
|
||
// MARK: - Properties | ||
|
||
// MARK: - UI Components | ||
|
||
private let errorImage: UIImageView = { | ||
let emptyImage = UIImageView() | ||
emptyImage.image = ImageLiterals.Common.img404 | ||
return emptyImage | ||
}() | ||
|
||
private let errorTitle: UILabel = { | ||
let emptyTitle = UILabel() | ||
emptyTitle.text = StringLiterals.Network.errorMessage | ||
emptyTitle.textColor = .donBlack | ||
emptyTitle.font = .font(.body1) | ||
emptyTitle.setTextWithLineHeight(text: emptyTitle.text, lineHeight: 22.adjusted, alignment: .center) | ||
emptyTitle.numberOfLines = 2 | ||
return emptyTitle | ||
}() | ||
|
||
private let homeButton = CustomButton(title: StringLiterals.Button.goHome, backColor: .donBlack, titleColor: .donWhite) | ||
|
||
// MARK: - Life Cycles | ||
|
||
override func viewDidLoad() { | ||
super.viewDidLoad() | ||
|
||
setUI() | ||
setHierarchy() | ||
setLayout() | ||
setAddTarget() | ||
} | ||
} | ||
|
||
|
||
// MARK: - Extensions | ||
|
||
extension ErrorViewController { | ||
private func setUI() { | ||
self.view.backgroundColor = .donWhite | ||
} | ||
|
||
private func setHierarchy() { | ||
self.view.addSubviews(errorImage, | ||
errorTitle, | ||
homeButton) | ||
} | ||
|
||
private func setLayout() { | ||
errorImage.snp.makeConstraints { | ||
$0.top.equalToSuperview().inset(statusBarHeight + 182.adjustedH) | ||
$0.centerX.equalToSuperview() | ||
$0.width.equalTo(255.adjusted) | ||
$0.height.equalTo(150.adjusted) | ||
} | ||
|
||
errorTitle.snp.makeConstraints { | ||
$0.top.equalTo(errorImage.snp.bottom).offset(34.adjustedH) | ||
$0.centerX.equalToSuperview() | ||
} | ||
|
||
homeButton.snp.makeConstraints { | ||
$0.bottom.equalTo(self.view.safeAreaLayoutGuide).inset(29.adjusted) | ||
$0.centerX.equalToSuperview() | ||
} | ||
} | ||
|
||
private func setAddTarget() { | ||
self.homeButton.addTarget(self, action: #selector(homeButtonTapped), for: .touchUpInside) | ||
} | ||
|
||
@objc | ||
private func homeButtonTapped() { | ||
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate { | ||
DispatchQueue.main.async { | ||
let viewController = DontBeTabBarController() | ||
viewController.selectedIndex = 0 | ||
if let selectedViewController = viewController.selectedViewController { | ||
viewController.applyFontColorAttributes(to: selectedViewController.tabBarItem, isSelected: true) | ||
} | ||
sceneDelegate.window?.rootViewController = UINavigationController(rootViewController: viewController) | ||
} | ||
} | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치는 주요 개선 제안:
버그/위험 사항:
추가 제안:
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -144,7 +144,7 @@ extension MyPageViewController { | |
self.navigationController?.navigationBar.addSubviews(navigationBackButton) | ||
navigationBackButton.snp.makeConstraints { | ||
$0.centerY.equalToSuperview() | ||
$0.leading.equalToSuperview().inset(23.adjusted) | ||
$0.leading.equalToSuperview().inset(16.adjusted) | ||
} | ||
rootView.pageViewController.view.snp.makeConstraints { | ||
$0.top.equalTo(rootView.segmentedControl.snp.bottom).offset(2.adjusted) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 코드 패치를 간략히 검토해보겠습니다. 개선할 점과 버그 위험에 대한 의견을 드리겠습니다.
주의할 점: 위의 검토 내용은 기존 코드와의 차이점에 초점을 맞추어 일반적인 개선점을 제시한 것일 뿐, 애플리케이션에서의 동작 결함 등 개별적인 사항은 파악하지 못하였습니다. 전체 코드와 함께 테스트하여 문제를 발견하고 수정하는 것이 좋습니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,7 +42,7 @@ final class MyPageProfileView: UIView { | |
|
||
let userNickname: UILabel = { | ||
let label = UILabel() | ||
label.text = "안녕하세요반가와요우히히" | ||
label.text = loadUserData()?.userNickname | ||
label.textColor = .donWhite | ||
label.textAlignment = .center | ||
label.font = .font(.head3) | ||
|
@@ -51,7 +51,7 @@ final class MyPageProfileView: UIView { | |
|
||
let userIntroduction: UILabel = { | ||
let label = UILabel() | ||
label.setTextWithLineHeight(text: "안녕하세요히안우히히안녕하세요반가와요우히히히히안녕하세요히안우히히안녕하세요반가와요우히히히히", lineHeight: 20.adjusted, alignment: .center) | ||
label.setTextWithLineHeight(text: "", lineHeight: 20.adjusted, alignment: .center) | ||
label.textColor = .donGray7 | ||
label.textAlignment = .center | ||
label.font = .font(.caption2) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아래는 코드 패치이며, 해당 코드의 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험 및 개선 제안 사항은 환영합니다: 주목할 점:
위의 주목할 점들을 고려하여 코드를 수정하시면 됩니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,6 +16,7 @@ final class PostReplyCollectionViewCell: UICollectionViewCell, UICollectionViewR | |
var KebabButtonAction: (() -> Void) = {} | ||
var LikeButtonAction: (() -> Void) = {} | ||
var TransparentButtonAction: (() -> Void) = {} | ||
var ProfileButtonAction: (() -> Void) = {} | ||
var isLiked: Bool = false | ||
var alarmTriggerType: String = "" | ||
var targetMemberId: Int = 0 | ||
|
@@ -44,6 +45,7 @@ final class PostReplyCollectionViewCell: UICollectionViewCell, UICollectionViewR | |
image.clipsToBounds = true | ||
image.image = ImageLiterals.Common.imgProfile | ||
image.layer.cornerRadius = 22.adjusted | ||
image.isUserInteractionEnabled = true | ||
return image | ||
}() | ||
|
||
|
@@ -277,6 +279,8 @@ extension PostReplyCollectionViewCell { | |
kebabButton.addTarget(self, action: #selector(showButtons), for: .touchUpInside) | ||
likeButton.addTarget(self, action: #selector(likeToggleButton), for: .touchUpInside) | ||
ghostButton.addTarget(self, action: #selector(transparentShowPopupButton), for: .touchUpInside) | ||
profileImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(profileButton))) | ||
|
||
} | ||
|
||
@objc | ||
|
@@ -292,4 +296,9 @@ extension PostReplyCollectionViewCell { | |
func transparentShowPopupButton() { | ||
TransparentButtonAction() | ||
} | ||
|
||
@objc | ||
func profileButton() { | ||
ProfileButtonAction() | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 다음은 코드 패치입니다. 해당 코드의 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험 또는 개선 제안을 알려주세요.
개선할 점: |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,7 +29,8 @@ final class PostViewController: UIViewController { | |
.map { _ in return self.contentId } | ||
.throttle(for: .seconds(2), scheduler: DispatchQueue.main, latest: false) | ||
.eraseToAnyPublisher() | ||
} | ||
} | ||
|
||
let viewModel: PostViewModel | ||
private var cancelBag = CancelBag() | ||
|
||
|
@@ -114,6 +115,11 @@ final class PostViewController: UIViewController { | |
} | ||
getAPI() | ||
} | ||
|
||
override func viewWillDisappear(_ animated: Bool) { | ||
self.navigationController?.navigationBar.isHidden = false | ||
self.navigationController?.navigationBar.backgroundColor = .clear | ||
} | ||
} | ||
|
||
// MARK: - Extensions | ||
|
@@ -304,6 +310,28 @@ extension PostViewController { | |
presentView() | ||
} | ||
|
||
@objc | ||
private func pushToMypage() { | ||
if self.memberId == loadUserData()?.memberId ?? 0 { | ||
self.tabBarController?.selectedIndex = 3 | ||
if let selectedViewController = self.tabBarController?.selectedViewController { | ||
self.applyTabBarAttributes(to: selectedViewController.tabBarItem, isSelected: true) | ||
} | ||
let myViewController = self.tabBarController?.viewControllers ?? [UIViewController()] | ||
for (index, controller) in myViewController.enumerated() { | ||
if let tabBarItem = controller.tabBarItem { | ||
if index != self.tabBarController?.selectedIndex { | ||
self.applyTabBarAttributes(to: tabBarItem, isSelected: false) | ||
} | ||
} | ||
} | ||
} else { | ||
let viewController = MyPageViewController(viewModel: MyPageViewModel(networkProvider: NetworkService())) | ||
viewController.memberId = memberId | ||
self.navigationController?.pushViewController(viewController, animated: true) | ||
} | ||
} | ||
|
||
func popView() { | ||
if UIApplication.shared.keyWindowInConnectedScenes != nil { | ||
UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { | ||
|
@@ -426,7 +454,8 @@ extension PostViewController { | |
self.postView.profileImageView.load(url: "\(data.memberProfileUrl)") | ||
postView.likeButton.setImage(data.isLiked ? ImageLiterals.Posting.btnFavoriteActive : ImageLiterals.Posting.btnFavoriteInActive, for: .normal) | ||
self.memberId = data.memberId | ||
|
||
self.postView.profileImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(pushToMypage))) | ||
|
||
// 내가 투명도를 누른 유저인 경우 -85% 적용 | ||
if data.isGhost { | ||
self.grayView.alpha = 0.85 | ||
|
@@ -517,6 +546,10 @@ extension PostViewController: UICollectionViewDataSource, UICollectionViewDelega | |
self.alarmTriggerdId = cell.alarmTriggerdId | ||
self.present(self.transparentPopupVC, animated: false, completion: nil) | ||
} | ||
cell.ProfileButtonAction = { | ||
self.memberId = self.viewModel.postReplyData[indexPath.row].memberId | ||
self.pushToMypage() | ||
} | ||
cell.nicknameLabel.text = viewModel.postReplyData[indexPath.row].memberNickname | ||
cell.transparentLabel.text = "투명도 \(viewModel.postReplyData[indexPath.row].memberGhost)%" | ||
cell.contentTextLabel.text = viewModel.postReplyData[indexPath.row].commentText | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아래는 코드 패치에 대한 간단한 코드 리뷰입니다. 버그 위험과/또는 개선 제안이 있는 경우 알려주세요:
이 외에는 보이는 문제가 없어 보입니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -33,6 +33,7 @@ final class PostView: UIView { | |
image.clipsToBounds = true | ||
image.layer.cornerRadius = 22.adjusted | ||
image.image = ImageLiterals.Common.imgProfile | ||
image.isUserInteractionEnabled = true | ||
return image | ||
}() | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험 사항 및 개선 제안을 언급할 예정입니다:
위의 사항을 감안하여 적절한 사용 방법인지 확인하십시오. 만약 이미지에 대한 상호 작용이 필요하지 않은 경우에는 그 외에는 코드 패치에서 별다른 버그 위험 사항은 보이지 않습니다. |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주어진 코드 패치의 코드 리뷰를 해드리겠습니다.
ErrorViewController.swift
가 소스로 추가됩니다.404
이라는 이름의 새로운 그룹이 생성되며,ErrorViewController.swift
파일이 해당 그룹에 포함됩니다.404
그룹이Presentation
그룹 내에 추가됩니다.ErrorViewController.swift in Sources
파일 참조가 추가됩니다.버그나 개선점을 파악하기 위해서는 전체 소스 코드와 어떤 프레임워크/도구를 사용하는지 알아야 합니다. 따라서 여기서 설명드릴 수 있는 점은 제한적입니다. 이 코드 패치가 올바르게 작동하려면 다음을 고려해야 할 수 있습니다:
이외에도 세부적인 내용은 제공되지 않아서 더 자세한 코드 분석이 어렵습니다. 전체 코드를 주실 경우 보다 정확하고 구체적인 피드백을 제공할 수 있습니다.