From 43e671ef2e1664fc4d63a3fb1b1e560aad3eff9e Mon Sep 17 00:00:00 2001 From: CJiu01 Date: Wed, 27 Nov 2024 16:57:04 +0900 Subject: [PATCH] =?UTF-8?q?[#90]=20LoginPromptVC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/Review/TotalReviewResponse.swift | 23 ---- .../Data/Network/Router/ReviewRouter.swift | 128 ++++++++++++++++++ .../LoginPromptViewController.swift | 65 +++++++++ 3 files changed, 193 insertions(+), 23 deletions(-) delete mode 100644 EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/DTO/Review/TotalReviewResponse.swift create mode 100644 EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/Router/ReviewRouter.swift create mode 100644 EATSSU_MVC/EATSSU_MVC/Sources/Presentation/Review/ViewController/LoginPromptViewController.swift diff --git a/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/DTO/Review/TotalReviewResponse.swift b/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/DTO/Review/TotalReviewResponse.swift deleted file mode 100644 index 76ced42..0000000 --- a/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/DTO/Review/TotalReviewResponse.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// TotalReviewResponse.swift -// EatSSU-iOS -// -// Created by 박윤빈 on 2023/05/22. -// - -//import Foundation -// -//struct TotalReviewResponse: Codable { -// let menuName: String -// let totalReviewCount: Int -// let grade: Double -// let reviewGradeCnt: StarCount -//} -// -//struct StarCount: Codable { -// let fiveCnt: Int -// let fourCnt: Int -// let threeCnt: Int -// let twoCnt: Int -// let oneCnt: Int -//} diff --git a/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/Router/ReviewRouter.swift b/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/Router/ReviewRouter.swift new file mode 100644 index 0000000..f37c3cb --- /dev/null +++ b/EATSSU_MVC/EATSSU_MVC/Sources/Data/Network/Router/ReviewRouter.swift @@ -0,0 +1,128 @@ +// +// ReviewRouter.swift +// EatSSU-iOS +// +// Created by 박윤빈 on 2023/05/22. +// + +import Moya +import Foundation + +enum ReviewRouter { + // 상단 메뉴 별점 불러오는 API -> 두개로 쪼개짐. 고정, 변동 분기처리는 아래에서! + case reviewRate(_ type: String, _ id: Int) + + // 하단 리뷰 리스트 불러오는 API + case reviewList(_ type: String, _ id: Int) + case report(param: ReportRequest) + case deleteReview(_ reviewId: Int) + case fixReview(_ reviewId: Int, _ param: BeforeSelectedImageDTO) +} + +extension ReviewRouter: TargetType, AccessTokenAuthorizable { + var baseURL: URL { + return URL(string: Config.baseURL)! + } + + var path: String { + switch self { + case .reviewRate(let type, let id): + switch type { + case "VARIABLE": + return "/reviews/meals/\(id)" + case "FIXED": + return "/reviews/menus/\(id)" + default: + return "" + } + case .reviewList: + return "/reviews" + case .report: + return "/reports" + case .deleteReview(let reviewId): + return "/reviews/\(reviewId)" + case .fixReview(let reviewId, _): + return "/reviews/\(reviewId)" + } + } + + var method: Moya.Method { + switch self { + case .reviewRate: + return .get + case .reviewList: + return .get + case .report: + return .post + case .deleteReview: + return .delete + case .fixReview: + return .patch + } + } + + var task: Moya.Task { + switch self { + case .reviewRate(let type, let id): + switch type { + case "VARIABLE": + return .requestParameters(parameters: ["mealId": id], + encoding: URLEncoding.queryString) + case "FIXED": + return .requestParameters(parameters: ["menuId": id], + encoding: URLEncoding.queryString) + default: + return .requestPlain + } + + /// 이후 정렬 순서, 리뷰 로드 개수 등 수정 필요하면 고치기 + case .reviewList(let type, let id): + switch type { + case "VARIABLE": + return .requestParameters(parameters: ["menuType": type, + "mealId": id, + "page": 0, + "size": 20, + "sort": "date,DESC"], + encoding: URLEncoding.queryString) + case "FIXED": + return .requestParameters(parameters: ["menuType": type, + "menuId": id, + "page": 0, + "size": 20, + "sort": "date,DESC"], + encoding: URLEncoding.queryString) + default: + return .requestPlain + } + case .report(param: let param): + return .requestJSONEncodable(param) + case .deleteReview: + return .requestPlain + case .fixReview(_, let param): + return .requestJSONEncodable(param) + } + } + + var headers: [String : String]? { + switch self { + case .reviewRate, .reviewList: + return ["Content-Type":"application/json"] + default: + let token = RealmService.shared.getToken() + if token == "" { + return ["Content-Type":"application/json"] + } else { + return ["Content-Type":"application/json", + "Authorization": "Bearer \(token)"] + } + } + } + + var authorizationType: Moya.AuthorizationType? { + switch self { + default: + return .bearer + } + } +} diff --git a/EATSSU_MVC/EATSSU_MVC/Sources/Presentation/Review/ViewController/LoginPromptViewController.swift b/EATSSU_MVC/EATSSU_MVC/Sources/Presentation/Review/ViewController/LoginPromptViewController.swift new file mode 100644 index 0000000..f34b270 --- /dev/null +++ b/EATSSU_MVC/EATSSU_MVC/Sources/Presentation/Review/ViewController/LoginPromptViewController.swift @@ -0,0 +1,65 @@ +// +// LoginPromptViewController.swift +// EATSSU +// +// Created by 최지우 on 11/26/24. +// + +import UIKit + +final class LoginPromptViewController: BaseViewController { + + // MARK: - UI Components + + private let loginAlertLabel: UILabel = { + let label = UILabel() + label.text = "3초만에 로그인하고\n리뷰를 달아보세요!" + label.textAlignment = .left + label.numberOfLines = 0 + label.font = EATSSUFontFamily.Pretendard.bold.font(size: 18) + return label + }() + + private let appleLoginButton: UIButton = { + let button = UIButton() + button.setImage(EATSSUAsset.Images.Version2.appleLoginButton.image, for: .normal) + return button + }() + + private let kakaoLoginButton: UIButton = { + let button = UIButton() + button.setImage(EATSSUAsset.Images.Version2.kakaoLoginButton.image, for: .normal) + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + +// view.backgroundColor = .yellow + } + + + override func configureUI() { + view.addSubviews( + loginAlertLabel, + appleLoginButton, + kakaoLoginButton + ) + } + + override func setLayout() { + loginAlertLabel.snp.makeConstraints { + $0.top.leading.equalTo(view.safeAreaLayoutGuide).offset(30.adjusted) + } + appleLoginButton.snp.makeConstraints { +// $0.top.equalTo(loginAlertLabel.snp.bottom).offset(44.adjusted) + $0.bottom.equalTo(kakaoLoginButton.snp.top).offset(8) + $0.centerX.equalToSuperview() + + } + kakaoLoginButton.snp.makeConstraints { + $0.bottom.equalTo(view.safeAreaLayoutGuide).inset(30) + $0.centerX.equalToSuperview() + } + } +}