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

[Feat] #391 - 솝마디 메인 뷰 화면 전환 및 데이터 바인딩 #393

Merged
merged 7 commits into from
Sep 28, 2024

Conversation

yungu0010
Copy link
Contributor

🌴 PR 요약

🌱 작업한 브랜치

🌱 PR Point

  • 솝마디 메인뷰 -> 결과뷰 화면 전환
  • 알림 상세 -> 솝마디 메인뷰 딥링크 바인딩
  • 푸시알림 -> 솝마디 메인뷰 딥링크 바인딩
  • 기존 dateFormat 메소드 수정

📌 참고 사항

setDateFormat 메소드 수정

  • 수정 전: String 타입을 확장하여 서버에서 내려준 dateString을 원하는 포맷으로 변경하는 메소드
  • 수정 후: String 타입 확장을 없애고 바꾸고자 하는 dateString, 기존 포맷, 변경 포맷을 인자로 받음.
    바꾸고자 하는 dateString이 없는 경우 오늘 날짜를 사용함.
  • [Feat] #386 - 솝마디 결과 뷰 API 연결 #389 에서 setDateFormat을 수정하면 DailySoptuneResultViewModel도 수정해주신다고 했는데 데이터 바인딩 과정에서 필요해 제가 수정해두었습니다 !
  • 기존 방식보다 함수가 지저분해진 것 같기도 해서,, 의견 부탁드립니다 !

데이터 바인딩

  • DailySoptuneMainViewModel에서 usecase output을 클로저에 전달
  • 전달된 output을 vc 생성자 주입
  • vc 내부의 view에서 setData로 데이터 바인딩

딥링크

  • 아직 서버에서 딥링크가 수정되지 않아 확인해보지 못했습니다,, (테스트 코드의 필요성을 한 번 더 느낌,,)
  • [Feat] 푸시 알림 링크 라우팅 구현 #298 딥링크 설계 과정은 해당 PR을 참고해주세요 !
  • 현재 딥링크는 fortune/word로 되어있어 설계 규칙에 따라 home/fortune로 수정 제안을 해둔 상태입니다.
  • 푸시 알림 클릭 시, 알림 상세 클릭 시 모두 home/fortune을 파싱하여 DailySoptuneDeepLink에서 dailySoptuneCoordinator.start()를 실행하게 됩니다.

📸 스크린샷

  • 토큰 재발급 이슈로 서버측에 확인 요청 드렸습니다 . .. ! 확인 후 첨부하겠습니다 !_!

📮 관련 이슈

- 주어진 날짜가 없다면 오늘 날짜를 사용
- bindOutput에서 클로저로 resultModel 전달
- 클로저 내부에서 vc 생성시 model 주입
- resultVC의 view에서 setData로 바인딩
- /fortune이 마지막인 경우 DailySoptuneCoordinator 실행
- /word가 마지막인 경우 DailySoptuneCoordinator 실행
- 추후 home/fortune으로 변경될 것을 고려하여 AppCoordinator에 flow 추가
@yungu0010 yungu0010 added Feat 새로운 기능 구현 윤서🍉 labels Sep 28, 2024
@yungu0010 yungu0010 self-assigned this Sep 28, 2024
Copy link

height bot commented Sep 28, 2024

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

Copy link
Contributor

@dlwogus0128 dlwogus0128 left a comment

Choose a reason for hiding this comment

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

수고하셨어용 짱짱걸

dateFormatter.timeZone = TimeZone(identifier: "Asia/Seoul")
- parameters:
- dateString: 변경하고자 하는 dateformat을 입력합니다. ex. "HH:mm"

Copy link
Contributor

Choose a reason for hiding this comment

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

🫶🏻

@yungu0010 yungu0010 merged commit 9bb7102 into develop Sep 28, 2024
@yungu0010 yungu0010 deleted the feat/#391-DailySoptune branch September 28, 2024 12:05
Copy link
Member

@lsj8706 lsj8706 left a comment

Choose a reason for hiding this comment

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

지나갔지만 PR 리뷰 한번씩은 달아주는게 예의인 것 같아서 별거 없지만 몇가지 남겨봅니다..
나중에 시간날 때 확인해보세요~!

*/

public func setDateFormat(date: String? = nil, from before: String? = nil, to after: String) -> String {
let dateFormatter = DateFormatter()
Copy link
Member

Choose a reason for hiding this comment

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

Swift의 DateFormatter init은 생각보다 오버헤드가 큰 작업으로 유명해요. 관련 링크
매번 생성하는 것이 아닌 가능하면 하나의 인스턴스를 두고 공유하는 것이 조금 더 좋을 것 같네요.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

헉 그동안 init 작업의 오버헤드는 고민해보지 않았던 것 같아요 감사합니다 !!

@@ -26,7 +26,7 @@ public func setDateFormat(date: String? = nil, from before: String? = nil, to af
dateFormatter.timeZone = TimeZone(identifier: "Asia/Seoul")

if let dateString = date,
let inputFormat = before {
let before = before {
Copy link
Member

Choose a reason for hiding this comment

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

요거 아마 이름 같으면 if let before { } 로 축약 가능할거에요

.subscribe(output.todayFortuneResult)
.withUnretained(self)
.sink { _, resultModel in
self.onReciveTodayFortuneButtonTap?(resultModel)
Copy link
Member

Choose a reason for hiding this comment

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

이거 재현이 PR에도 코멘트 남겼었는데 다음과 같이 써야 됩니당

        .withUnretained(self)       
        .sink { owner, resultModel in
            owner.onReciveTodayFortuneButtonTap?(resultModel)
         }

@@ -70,24 +71,32 @@ extension DailySoptuneResultContentView {
self.addSubviews(soptuneLogoImage, dateLabel, contentLabel)

soptuneLogoImage.snp.makeConstraints { make in
make.top.equalToSuperview().inset(32)
make.top.equalToSuperview().inset(32.adjustedH)
Copy link
Member

Choose a reason for hiding this comment

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

궁금증!
혹시 adjusted를 쓰는 이유가 있을까요~? 저는 개인적으로 기기에 따라 간격이 비례했으면 좋겠다는 디자인 요구사항이 없다면 이걸 사용하지 않거든요.
(정말 그냥 호기심에 질문 드리는거에요!)

public struct DailySoptuneWordDeepLink: DeepLinkExecutable {
public var name = "word"
public var children: [DeepLinkExecutable] = []
public var isDestination = true
Copy link
Member

Choose a reason for hiding this comment

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

요거 아마 여기서 true로 지정할 필요 없을거에요.
딥링크 URL이 어떤 형식으로 오는지 모르겠지만 예를 들어 다음과 같이 온다면,
url = "home/soptune-main/soptune-detail"
가장 마지막 path인 soptune-detail에 대응되는 DeepLinkExecutable 구현체에 isDestination를 true로 바꿔주는 로직이 있어요. (DeepLinkParser의 makeDeepLinkList 메서드를 참고해주시길)

Copy link
Member

Choose a reason for hiding this comment

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

제가 사용할 때 헷갈릴만한 인터페이스로 만든 것 같네요 🙇‍♂️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feat 새로운 기능 구현 size/L 윤서🍉
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] 솝마디 메인 뷰 화면 전환 및 데이터 바인딩
3 participants