-
Notifications
You must be signed in to change notification settings - Fork 1
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 [#45] 성공 여부 저장 로직 추가 #55
Conversation
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.
복잡한 로직 구현... 고생 많으셨을 것 같습니다..
파이팅 파이팅 ~
} | ||
|
||
extension AppDelegate { | ||
private func sendDailyChallengeDataIfNeeded() { |
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.
👍 작명 센스가 좋습니다!!
extension Date { | ||
func formattedString(format: String = "yyyy-MM-dd") -> String { | ||
let formatter = DateFormatter() | ||
formatter.dateFormat = format | ||
return formatter.string(from: self) | ||
} | ||
} | ||
|
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.
👍 이부분 저도 활용해봐야겠어요..
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.
유용할 것 같아서 extension
으로 추가해뒀습니다! 유용하게 사용하세용 ~
@StateObject var screenTimeModel = ScreenTimeViewModel() | ||
@StateObject var challengeModel = ChallengeViewModel() |
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.
❓지금은 어쩔 수 없지만... 구조적으로 뷰모델에서 뷰모델을 선언해주는게 좋을까란.. 싶긴합니다..
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.
구조 전체적인 수정이 필요하긴 합니다! 리뷰 감사해요~
func patchPointUse() { | ||
let dateFormatter = DateFormatter() | ||
dateFormatter.dateFormat = "yyyy-MM-dd" | ||
let currentDate = dateFormatter.string(from: Date()) | ||
let request = PointRequestDTO(challengeDate: currentDate) | ||
Providers.pointProvider.request(target: .patchPointUse(data: request), | ||
instance: BaseResponse<UsagePointResponseDTO>.self) { result in | ||
|
||
instance: BaseResponse<PatchPointUseResponseDTO>.self) { result in | ||
if result.status == 400 { |
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.
❓ 에러 코드에 대한 핸들링을 위하여 NetworkProvider에 다음과 같이 선언해서 실패 에러 처리에 바로 안걸리게 해놓았는데요.
case .success(let response):
if (200..<300).contains(response.statusCode) ||
response.statusCode == 403 || response.statusCode == 400
이 방식이 괜찮은 건지 의문입니다..
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.
제가 생각했을 때는 좋아보입니다!
따로 Vaildate를 해줄 수 있는 방법도 한 번 알아보면 좋을 것 같아요~
저렇게 하지 않으면 200대만 성공으로 인식하기 때문에 나머지가 인터셉터에서 처리해줘야 하는 문제가 발생할 것 같네용
if result.status == 400 { | ||
self.currentAlertType = .insufficientPoints | ||
} else if result.status == 200 { | ||
// 특정 앱이 아닌 설정해둔 모든 앱이 잠기므로 모든 앱 잠금 해제 | ||
self.screenTimeModel.unblockAllApps() |
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.
❓ 이 부분과 별개로..
저희 그러면 자정에 어떤 동작들이 이루어지나요.?
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.
정말 큰 부분이었는데 제가 깜빡했네요! 지금 구현해두었습니다.
지금 report에서 Fail일 때 뷰 전환(로티, 타이틀)을 위해 Bool 변수를 Appstorage를 이용해서 선언했는데요,
이는 UserDefaults 처럼 사용되기 때문에 자정에 실패 처리했던 변수를 한번 초기화해줘야 해요!
그 부분만 간단하게 백그라운드에서 처리해줄 수 있도록 변경해두었습니다~
이 부분 출시 이후헤 같이 테스트 해요!
👾 작업 내용
🚀 PR Point
챌린지 성공 여부 저장 로직을 유의해서 봐주세요!
일단 이해한 기능 대로 이렇게 구현했는데, 이러면 CoreData, 백그라운드 작업이 사실 상 필요없더라구요!
그런데, 만약 전체 사용 시간이 넘어갈 때까지 사용한 것도 실패라면, 이벤트에 실패 처리를 달아야 할 것 같습니다.
📸 스크린샷
✅ CheckList
🔗 Issue
Resolved #45