Skip to content

Commit

Permalink
feat/#240 준비 정보 시간 설정 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
youz2me committed Jul 19, 2024
1 parent a7e8c74 commit b292e1d
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ class ReadyPlanInfoView: BaseView {

// MARK: Property

private let readyTimeLabel: UILabel = UILabel().then {
let readyTimeLabel: UILabel = UILabel().then {
$0.setText("12시 30분에 준비하고,\n1시에 이동을 시작해야 해요", style: .body03)
$0.setHighlightText("12시 30분", "1시", style: .body03, color: .maincolor)
}

private let requestReadyTimeLabel: UILabel = UILabel().then {
let requestReadyTimeLabel: UILabel = UILabel().then {
$0.setText("준비 소요 시간: 30분", style: .label02, color: .gray8)
}

private let requestMoveTimeLabel: UILabel = UILabel().then {
let requestMoveTimeLabel: UILabel = UILabel().then {
$0.setText("이동 소요 시간: 1시간 30분", style: .label02, color: .gray8)
}

Expand Down Expand Up @@ -69,7 +69,3 @@ class ReadyPlanInfoView: BaseView {
}
}
}

extension ReadyPlanInfoView {
func configure() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ class ReadyStatusViewController: BaseViewController {

@objc
func readyStartButtonDidTapped() {
// TODO: 늦었을 때 꾸물거릴 시간이 없어요 팝업 뜨도록 설정
readyStatusViewModel.myReadyProgressStatus.value = .ready
rootView.myReadyStatusProgressView.readyStartButton.isEnabled.toggle()
}
Expand Down Expand Up @@ -174,9 +173,32 @@ private extension ReadyStatusViewController {
owner.updateReadyInfoView(flag: false)
return
}
// TODO: 시간 계산 로직 필요..

owner.updateReadyInfoView(flag: true)
owner.rootView.readyPlanInfoView.configure()
owner.readyStatusViewModel.calculatePrepareTime()
owner.readyStatusViewModel.convertMinute()
}
}

readyStatusViewModel.moveTime.bind(with: self) { owner, moveTime in
owner.rootView.readyPlanInfoView.requestMoveTimeLabel.setText("이동 소요 시간: \(moveTime)", style: .label02, color: .gray8)
}

readyStatusViewModel.readyTime.bind(with: self) { owner, readyTime in
owner.rootView.readyPlanInfoView.requestReadyTimeLabel.setText("준비 소요 시간: \(readyTime)", style: .label02, color: .gray8)
}

readyStatusViewModel.readyStartTime.bind(with: self) { owner, readyStartTime in
DispatchQueue.main.async {
owner.rootView.readyPlanInfoView.readyTimeLabel.setText("\(readyStartTime)에 준비하고,\n\(owner.readyStatusViewModel.moveStartTime.value)에 이동을 시작해야 해요", style: .body03)
owner.rootView.readyPlanInfoView.readyTimeLabel.setHighlightText(readyStartTime, owner.readyStatusViewModel.moveStartTime.value, style: .body03, color: .maincolor)
}
}

readyStatusViewModel.moveStartTime.bind(with: self) { owner, moveStartTime in
DispatchQueue.main.async {
owner.rootView.readyPlanInfoView.readyTimeLabel.setText("\(owner.readyStatusViewModel.readyStartTime.value)에 준비하고,\n\(moveStartTime)에 이동을 시작해야 해요", style: .body03)
owner.rootView.readyPlanInfoView.readyTimeLabel.setHighlightText(owner.readyStatusViewModel.readyStartTime.value, moveStartTime, style: .body03, color: .maincolor)
}
}

Expand Down Expand Up @@ -211,7 +233,7 @@ private extension ReadyStatusViewController {
}

func updateReadyStartButton(status: ReadyProgressStatus) {
/// 버튼 누를 때 서버 통신하게 설정
// TODO: 버튼 누를 때 서버 통신하게 설정
switch status {
case .none:
rootView.myReadyStatusProgressView.readyStartButton.setupButton(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,22 @@ class ReadyStatusViewModel {
/// bind를 사용하라는 말이 아님
let promiseName = ObservablePattern<String>("")

// 준비 정보가 입력되었는지 여부
// let isReadyInfoEntered = ObservablePattern<Bool>(false)

/// 나의 준비현황이 담긴 정보
/// 설령 데이터가 없다하더라도 약속 시간은 담겨있음.
let myReadyStatus = ObservablePattern<MyReadyStatusModel?>(nil)

// 준비 시작 시간
var readyStartTime = ObservablePattern<String>("")

// 준비 소요 시간
var readyTime = ObservablePattern<String>("")

// 이동 시작 시간
var moveStartTime = ObservablePattern<String>("")

// 이동 소요 시간
var moveTime = ObservablePattern<String>("")

// 현재 준비 상태에 대한 버튼 처리
let myReadyProgressStatus = ObservablePattern<ReadyProgressStatus>(.none)

Expand Down Expand Up @@ -63,6 +72,55 @@ class ReadyStatusViewModel {
}

extension ReadyStatusViewModel {
func convertMinute() {
let preparationHours = (self.myReadyStatus.value?.preparationTime ?? 0) / 60
let preparationMinutes = (self.myReadyStatus.value?.preparationTime ?? 0) % 60

readyTime.value = preparationHours == 0 ? "\(preparationMinutes)" : "\(preparationHours)시간 \(preparationMinutes)"

let travelHours = (self.myReadyStatus.value?.travelTime ?? 0) / 60
let travelMinutes = (self.myReadyStatus.value?.travelTime ?? 0) % 60

moveTime.value = travelHours == 0 ? "\(travelMinutes)" : "\(travelHours)시간 \(travelMinutes)"
}

func calculatePrepareTime() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.locale = Locale(identifier: "ko_KR")
dateFormatter.timeZone = TimeZone(identifier: "Asia/Seoul")

let promiseTime = self.myReadyStatus.value?.promiseTime ?? ""
let readyTime = self.myReadyStatus.value?.preparationTime ?? 0
let moveTime = self.myReadyStatus.value?.travelTime ?? 0


guard let promiseDate = dateFormatter.date(from: promiseTime) else {
print("Invalid date format: \(promiseTime)")
return
}

let totalPrepTime = TimeInterval((readyTime + moveTime) * 60)

let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HH시 mm분"
timeFormatter.timeZone = TimeZone(identifier: "Asia/Seoul")

print("약속 시간: \(timeFormatter.string(from: promiseDate))")
print("준비 시간: \(readyTime)")
print("이동 시간: \(moveTime)")
print("총 준비 시간: \(totalPrepTime / 60)")

let readyStartTime = promiseDate.addingTimeInterval(-TimeInterval(readyTime + moveTime) * 60)
let moveStartTime = promiseDate.addingTimeInterval(-TimeInterval(moveTime) * 60)

self.readyStartTime.value = timeFormatter.string(from: readyStartTime)
print("준비 시작 시간: \(self.readyStartTime.value)")

self.moveStartTime.value = timeFormatter.string(from: moveStartTime)
print("이동 시작 시간: \(self.moveStartTime.value)")
}

func fetchMyReadyStatus() {
Task {
do {
Expand Down

0 comments on commit b292e1d

Please sign in to comment.