Skip to content

Commit

Permalink
feat #47: 인증 검사 API 연동
Browse files Browse the repository at this point in the history
+ SplashView isJoining API 호출 로직 수정, 이슈 #5 수정
  • Loading branch information
seungyooooong committed Feb 20, 2025
1 parent 0d51142 commit 5b156fc
Show file tree
Hide file tree
Showing 13 changed files with 92 additions and 62 deletions.
Binary file modified .DS_Store
Binary file not shown.
2 changes: 1 addition & 1 deletion dogether/Data/Model/RankingModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import Foundation

struct RankingModel: Codable {
struct RankingModel: Decodable {
let rank: Int
let name: String
let certificationRate: Double
Expand Down
3 changes: 2 additions & 1 deletion dogether/Data/Model/ReviewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@

import Foundation

struct ReviewModel: ReviewInfo, Codable {
struct ReviewModel: Decodable {
let id: Int
let content: String
let mediaUrls: [String]
let todoContent: String
let doer: String
}
15 changes: 0 additions & 15 deletions dogether/Data/Network/Response/GetReviewResponse.swift

This file was deleted.

5 changes: 1 addition & 4 deletions dogether/Data/Network/Router/TodoCertificationsRouter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,19 @@ import Foundation
enum TodoCertificationsRouter: NetworkEndpoint {
case reviewTodo(todoId: String, reviewTodoRequest: ReviewTodoRequest)
case getReviews
case getReview(todoId: String)

var path: String {
switch self {
case .reviewTodo(let todoId, _):
return Path.api + Path.todoCertifications + "/\(todoId)/review"
case .getReviews:
return Path.api + Path.todoCertifications + "/pending-review"
case .getReview(let todoId):
return Path.api + Path.todoCertifications + "/\(todoId)"
}
}

var method: NetworkMethod {
switch self {
case .getReviews, .getReview:
case .getReviews:
return .get
case .reviewTodo:
return .post
Expand Down
15 changes: 0 additions & 15 deletions dogether/Data/Protocol/ReviewInfo.swift

This file was deleted.

4 changes: 2 additions & 2 deletions dogether/Domain/Entity/GroupTypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ enum GroupTypes: Int {
var completeTitleText: String {
switch self {
case .join:
return "그룹 생성 완료 !\n이제 목표를 실천해보세요"
return "그룹 가입 완료 !\n이제 목표를 실천해보세요"
case .create:
return "그룹 가입 완료 !\n팀원들에게 코드를 공유해보세요"
return "그룹 생성 완료 !\n팀원들에게 코드를 공유해보세요"
}
}

Expand Down
12 changes: 6 additions & 6 deletions dogether/Presentation/Common/ExaminationModalityView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import SnapKit

final class ExaminationModalityView: UIView {
var buttonAction: (FilterTypes) -> Void
private var todoInfo: TodoInfo
private var review: ReviewModel

init(buttonAction: @escaping (FilterTypes) -> Void, todoInfo: TodoInfo) {
init(buttonAction: @escaping (FilterTypes) -> Void, review: ReviewModel) {
self.buttonAction = buttonAction
self.todoInfo = todoInfo
self.review = review
super.init(frame: .zero)
setUI()
}
Expand Down Expand Up @@ -81,12 +81,12 @@ final class ExaminationModalityView: UIView {
// TODO: 추후 수정
imageView = CertificationImageView(
image: .logo,
certificationContent: todoInfo.certificationContent ?? "",
certificator: UserDefaultsManager.shared.userFullName ?? ""
certificationContent: review.content,
certificator: review.doer
)

contentLabel.attributedText = NSAttributedString(
string: todoInfo.content,
string: review.todoContent,
attributes: Fonts.getAttributes(for: Fonts.head2B, textAlignment: .center)
)

Expand Down
26 changes: 18 additions & 8 deletions dogether/Presentation/View/ModalityViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import UIKit
import SnapKit

final class ModalityViewController: BaseViewController {
var viewModel = ModalityViewModel()

// TODO: 현재는 TodoExamination 단일 종류만 존재하지만 추후 확장
private let backgroundView = {
let view = UIView()
Expand All @@ -34,27 +36,26 @@ final class ModalityViewController: BaseViewController {
}

override func configureView() {
// TODO: 추후 수정
let todoInfos: [TodoInfo] = []

closeButton.action = didTapCloseButton
todoExaminationModalityView = ExaminationModalityView(buttonAction: { type in
switch type {
case .reject:
// TODO: rejectReason 초기화
self.viewModel.setResult(.reject)
self.viewModel.setRejectReason()
self.closeButton.setButtonStatus(status: .disabled)
PopupManager.shared.showPopup(type: .rejectReason, completeAction: { rejectReason in
// TODO: rejectReason 재정의
self.viewModel.setRejectReason(rejectReason)
self.closeButton.setButtonStatus(status: .enabled)
})

case .approve:
self.viewModel.setResult(.approve)
self.closeButton.setButtonStatus(status: .enabled)

default:
return
}
}, todoInfo: todoInfos[0])
}, review: viewModel.reviews[viewModel.current])
}

override func configureHierarchy() {
Expand Down Expand Up @@ -84,7 +85,16 @@ final class ModalityViewController: BaseViewController {
}

private func didTapCloseButton() {
// TODO: 끝이 아니라면 다음으로
ModalityManager.shared.dismiss()
Task { @MainActor in
try await viewModel.reviewTodo()
viewModel.setCurrent(viewModel.current + 1)
if viewModel.reviews.count == viewModel.current {
ModalityManager.shared.dismiss()
} else {
viewModel.setResult()
viewModel.setRejectReason()
configureView() // TODO: 추후 확인
}
}
}
}
18 changes: 10 additions & 8 deletions dogether/Presentation/View/SplashViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,19 @@ final class SplashViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()

// TODO: 추후 viewModel로 이동
Task { @MainActor in
let response: GetIsJoiningResponse = try await NetworkManager.shared.request(GroupsRouter.getIsJoining)

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
// TODO: 추후 viewModel로 이동
Task { @MainActor in
if UserDefaultsManager.shared.accessToken == nil {
NavigationManager.shared.setNavigationController(OnboardingViewController())
} else if response.isJoining {
NavigationManager.shared.setNavigationController(MainViewController())
} else {
NavigationManager.shared.setNavigationController(StartViewController())
let response: GetIsJoiningResponse = try await NetworkManager.shared.request(GroupsRouter.getIsJoining)

if response.isJoining {
NavigationManager.shared.setNavigationController(MainViewController())
} else {
NavigationManager.shared.setNavigationController(StartViewController())
}
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions dogether/Presentation/ViewModel/MainViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,11 @@ final class MainViewModel {
let response: GetMyTodosResponse = try await NetworkManager.shared.request(TodosRouter.getMyTodos(date: date, status: status))
self.setTodoList(response.todos)
}

func getReviews() async throws {
let response: GetReviewsResponse = try await NetworkManager.shared.request(TodoCertificationsRouter.getReviews)
if response.dailyTodoCertifications.count > 0 {
ModalityManager.shared.show(reviews: response.dailyTodoCertifications)
}
}
}
41 changes: 41 additions & 0 deletions dogether/Presentation/ViewModel/ModalityViewModel.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// ModalityViewModel.swift
// dogether
//
// Created by seungyooooong on 2/20/25.
//

import Foundation

final class ModalityViewModel {
private(set) var reviews: [ReviewModel] = []
private(set) var current: Int = 0
private(set) var result: ReviewResults? = nil
private(set) var rejectReason: String = ""

func setReviews(_ reviews: [ReviewModel]?) {
guard let reviews else { return }
self.reviews = reviews
}

func setCurrent(_ current: Int) {
self.current = current
}

func setResult(_ result: ReviewResults? = nil) {
self.result = result
}

func setRejectReason(_ rejectReason: String = "") {
self.rejectReason = rejectReason
}

func reviewTodo() async throws {
let todoId = String(reviews[current].id)
guard let result else { return }
let reviewTodoRequest = ReviewTodoRequest(result: result, rejectReason: result == .reject ? rejectReason : nil)
try await NetworkManager.shared.request(
TodoCertificationsRouter.reviewTodo(todoId: todoId, reviewTodoRequest: reviewTodoRequest)
)
}
}
6 changes: 4 additions & 2 deletions dogether/Utility/Manager/ModalityManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ final class ModalityManager {

var window: UIWindow?

func show() {
func show(reviews: [ReviewModel]? = nil) {
guard window == nil else { return }

let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
let newWindow = UIWindow(windowScene: windowScene!)
newWindow.frame = UIScreen.main.bounds
newWindow.windowLevel = .alert + 1
newWindow.rootViewController = ModalityViewController()
let modalityViewController = ModalityViewController()
modalityViewController.viewModel.setReviews(reviews)
newWindow.rootViewController = modalityViewController
newWindow.isHidden = false
self.window = newWindow
}
Expand Down

0 comments on commit 5b156fc

Please sign in to comment.