Skip to content
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

목표시간 초기화 프로세스 개선 #160

Merged
merged 15 commits into from
Jul 2, 2024

Conversation

sladuf
Copy link
Contributor

@sladuf sladuf commented Jun 26, 2024

리뷰 요청

  • 🙋 꼭 리뷰를 받고 싶어요!
  • 리뷰 긴급도: Toast PR 전까지만 부탁드립니당
  • ⭐️ clone받아서 아래의 QA프로세스 체크 부탁 드립니다!!!

개요


변경사항

  • Timer View와 비즈니스 로직이 변경되었어요
  • StopWatch View와 비즈니스 로직이 변경되었어요
  • Timer와 StopWatch의 View에 있는 비즈니스 로직을 ViewModel로 이동했어요
  • 날짜 갱신을 오전 6시에 앱을 사용하면 자동화해요
  • 목표 시간을 통해 기록을 초기화하는 로직을 삭제하고, 목표 시간을 변경하는 기능으로 변경 했어요
  • 기록 동기화에서 생기는 버그를 개선했어요 DailyUseCase -> uploadDailys()

Timer & Stopwatch 변경사항

  • 목표 시간 초기화 로직을 목표 시간 수정으로 변경했어요
  • UI는 아이콘과 Text가 바뀌었고, 내부 비즈니스 로직도 목표 시간 수정으로 변경되었어요
BEFORE AFTER
IMG_2977 IMG_3715
  • 날짜가 자동으로 변경돼요, 화면 상단 중앙에 노출되는 경고 표시를 지웠어요

기록 동기화 버그 개선

  • DailyUseCase에서 uploadDailys()할 때 비어있는 Daily 때문에 정상 동작 하지 않았던 버그를 해결했어요
  • 서버로 업로드 하기 전 [Daily]에 filter로직을 추가해 비어 있는 Daily는 제외하고 업로드 하도록 변경했어요
  • ⭐️ 임시 조치이기 때문에, 추후에 Daily의 비즈니스 로직의 개선이 필요해요

QA 프로세스

💡 RecordsManagerresetHour를 조작하면 가까운 시간에 테스트 할 수 있어요!

  • 단, 당일의 시간을 resetHour로 설정하는 경우 원활한 테스트 진행이 어려울 수 있습니다
  • ex) 1월1일 오후 10시에 테스트를 진행하는데 resetHour를 23시(오후 11시)로 설정하는 경우 -> 다음날이 아니기 때문에 테스트가 정확하지 않을 수 있음
  • 1월1일에 오후 10시에 테스트를 한다면, resetHour를 다음날로 넘어갈 수 있도록 0~21시로 설정을 권장합니다
  1. resetHour 이후에 앱을 켜 다음날로 변경 되었는지 확인해요
  2. resetHour 이전에 앱을 켜 Stopwatch 또는 Timer를 동작하고, resetHour 이후에 종료합니다.
    이때, 전 날의 날짜에 해당 기록 시간이 모두 기록되었는지 확인해요
  3. resetHour 이전에 앱을 키고, resetHour 이후에 Stopwatch 또는 Timer를 동작하고 종료합니다.
    이때, 다음날로 기록이 되었는지 확인해요

@sladuf sladuf added the feature 기능 추가/변경/삭제 label Jun 26, 2024
@sladuf sladuf self-assigned this Jun 26, 2024
@sladuf sladuf linked an issue Jun 26, 2024 that may be closed by this pull request
3 tasks
@sladuf sladuf requested a review from minsangKang June 27, 2024 03:42
@sladuf sladuf marked this pull request as ready for review June 27, 2024 03:42
@sladuf sladuf requested review from minsangKang and removed request for minsangKang June 29, 2024 07:23
@sladuf sladuf changed the base branch from master to feature/date_auto_renew July 2, 2024 10:36
@sladuf sladuf merged commit af2ce9b into feature/date_auto_renew Jul 2, 2024
Copy link
Member

@minsangKang minsangKang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!
너무 늦게 확인해서 죄송합니다..! 🙇🏻‍♂️🙇🏻‍♂️

코드리뷰를 하면서 느낀점도 공유드릴께요!

  • profile 과 같은 프로젝트 관련 변동사항으로 인한 문제를 해결하기 위한 tuist 적용 고민 필요성
  • 코드컨벤션 논의 및 Swift Lint 필요성

@@ -2686,6 +2705,8 @@
MARKETING_VERSION = 7.17.2;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_ID)";
PRODUCT_NAME = "$(APP_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P5 (의견)
profile이 git 변경사항으로 잡히는군요 ㅠㅠ
tuist 적용이 필요할지 고민되네여..

@@ -15,7 +15,14 @@ final class RecordsManager {
var recordTimes = RecordTimes()
var currentDaily = Daily()
var currentTask: Task?
var showWarningOfRecordDate: Bool = false
//FIXME: 회의 후 결정 및 변경
private let resetHour = 6
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4 (참고)

private let resetHour: Int = 6

Comment on lines +21 to +25
var isDateChanged: Bool {
let today = Date()
let compareDay = currentDaily.day.nextDay.setTime(hour: resetHour)
return today >= compareDay
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4 (참고)

var isDateChanged: Bool {
    let now = Date()
    let compareTime: Date = self.curentDaily.day.nextDay.setTime(hour: resetHour)
    return now >= compareTime
}

Project_Timer/Core/Localize/TLRen.swift Show resolved Hide resolved
@@ -16,7 +16,8 @@ final class DailysUseCase: DailysUseCaseInterface {
}

func uploadDailys(dailys: [Daily], completion: @escaping (Result<Bool, NetworkError>) -> Void) {
self.repository.upload(dailys: dailys) { result in
let newDailys = dailys.filter { $0.totalTime > 0}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4 (참고)

let newDailys: [Daily] = dailys.filter { $0.totalTime > 0 }

@@ -321,7 +314,7 @@ extension StopwatchVC {
self.taskButton.titleLabel?.font = Typographys.uifont(.semibold_4, size: 18)
}
private func configureRendering() {
self.settingBT.setImage(UIImage.init(systemName: "calendar.badge.plus")?.withRenderingMode(.alwaysTemplate), for: .normal)
self.settingBT.setImage(.init(named: "calendar")?.withRenderingMode(.alwaysTemplate), for: .normal)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P5 (의견)
Image의 경우 한곳에서 관리되면 어떨까요?
티티 코드가 가물가물하지만...ㅎㅎ
Core / Design System / Icons 내 Icons 파일에 추가할 예정이였는지, 없어진건진 모르겠지만
이런식으로 관리되면 좋을 것 같아요!

struct Icons {
    static var calendar: UIImage? = { .init(named: "calendar")?.withRenderingMode(.alwaysTemplate) }
}

@@ -67,7 +67,9 @@ final class StopwatchVM {
}

private func checkRecordDate() {
self.warningNewDate = RecordsManager.shared.showWarningOfRecordDate
if RecordsManager.shared.isDateChanged {
newRecord()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4 (참고)
self 추가가 가능한 경우 모두 반영되면 빌드 속도, 그리고 해당 코드가 어디에 속하는지를 빠르게 알 수 있을 것 같아요!
newRecord 메소드 명칭도 createNewRecord 또는 createNewDaily 식으로 변경되면 좋을 것 같습니다!

self.newRecord()

} else {
self.checkRecordDate()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 (꼭 확인)
checkRecordDate 함수 내에서 호출된 newRecord 함수가 동기적으로 이뤄지는지 확인이 필요할 것 같아요!
Daily 수정 및 저장이 이뤄진 이후에 updateAnimationSetting 메소드가 호출되는지 확인 부탁드립니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요거는 흐름을 좀 알려주시면 좋을것 같아요
updateAnimationSetting이 왜 daily수정&저장 이후에 호출되어야 하는지 로직이 궁금해요!

현재 코드 상으로는 init시점에는 updateAnimationSetting()이 checkRecordDate()보다 위에 있기 때문에 먼저 실행될 것으로 보이네요! 그리고 이 부분은 제가 건드리지 않았기 때문에 기존 로직입니당
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 기능 추가/변경/삭제
Projects
None yet
Development

Successfully merging this pull request may close these issues.

목표시간 초기화 프로세스 개선
2 participants