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: 지도 탭 api 연결 #247

Merged
merged 17 commits into from
Dec 8, 2023
Merged

feat: 지도 탭 api 연결 #247

merged 17 commits into from
Dec 8, 2023

Conversation

anyukyung
Copy link
Member

🧑‍🚀 PR 요약

해당 pr에서 작업한 내역을 적어주세요.

  • 지도 탭에 반경 내 게시물들을 보여주는 api를 연결했습니다.

어노테이션 선택 → 해당 영상으로 스크롤

RPReplay_Final1701972326.MP4

영상 스크롤 → 어노테이션 포커싱

RPReplay_Final1701972434.MP4
  • 현재 어노테이션으로 포커싱은 하고있으나, selection 문제로 인해서 하이라이트는 안되는 상황입니다..
  • 임의로 어노테이션을 select을 하는 순간 로직이 꼬여서 좀 더 공부해서 개선해보겠습니다 !

썸네일 concurrent하게 다운로드

  • 이 과정에서 thumbnailImage의 타입이 Data인 모델이 필요했습니다.
  • 근데 공통으로 쓰고있는 Post모델은 URL 타입이어서 전부 바꿀까 하다가
  • 우선은 MapModels 내부에 Post를 만들어두고 썼습니다.. ! Worker에서 data로 변환해줘서 interactor에 뿌리는게 다 괜찮으시면 나중에 공통 모델을 바꾸어야 할 것 같습니다.
            let posts = try await data.concurrentMap { postDTO -> Models.Post in
                let thumnailImageData = try await self.provider.request(url: postDTO.board.videoThumbnailURL)
                return .init(member: postDTO.member.toDomain(),
                             board: postDTO.board.toDomain(),
                             tag: postDTO.tag,
                             thumnailImageData: thumnailImageData)
            }

Linked Issue

close #226

@anyukyung
Copy link
Member Author

앗 ㅠㅠ 또 썸네일 오타났네 고치겠습니당

Copy link
Collaborator

@chopmozzi chopmozzi left a comment

Choose a reason for hiding this comment

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

고생하셨습니다~~

iOS/Layover/Layover/Scenes/Map/MapModels.swift Outdated Show resolved Hide resolved
posts = request.videos
index = request.index
presenter?.presentPlaybackScene()
func fetchPosts() -> Task<[MapModels.Post], Never> {
Copy link
Collaborator

Choose a reason for hiding this comment

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

보니까 받는 데서는 결과를 쓰지 않는 모양인 것 같은데 그냥 반환 성공하면 true리턴?이 낫지 않나요

Copy link
Member Author

Choose a reason for hiding this comment

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

추후에 Task 리턴을 들어내야하긴 하지만..?
테스트하는 입장에서 생각해보면 빈배열보다는 지웅님 말씀처럼 불리언 타입이 나을 것 같네용..
이참에 그냥 없애버릴까요..

Copy link
Collaborator

Choose a reason for hiding this comment

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

Test를 위해 Bool을 쓰긴 하는거니까요... 먼가 애매애매하군요.. 고민이 필요해 보입니다..!

Copy link
Collaborator

@loinsir loinsir Dec 8, 2023

Choose a reason for hiding this comment

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

멘토님 말씀처럼 정답이 없다고 하셔가지고
-> 박터지는 싸움의 현장(어떻게 Task 블록으로만 감싸진 메서드를 테스트할 것인가)
논의가 필요할 것 같습니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

저는 개인적으로 멘토님이 처음 말씀해주신 의견에 동의하긴 합니다 !
어쨌든 테스트로 인해서 프로덕트 코드가 변경되어야한다는 점이 최대 단점같아서요. 여러분 생각도 궁금하네용

Copy link
Collaborator

@loinsir loinsir Dec 8, 2023

Choose a reason for hiding this comment

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

이건 추후 리팩토링 할 떄 의제로 남겨놓을게요 ADR ADR...

@anyukyung anyukyung linked an issue Dec 8, 2023 that may be closed by this pull request
1 task
Comment on lines 34 to 36
destination.parentView = .other
destination.index = source.index
destination.index = source.postPlayStartIndex
destination.posts = source.posts
Copy link
Collaborator

Choose a reason for hiding this comment

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

지난번 얘기한 대로 datapass 메서드로 분리되었으면 좋겠습니다

Copy link
Collaborator

Choose a reason for hiding this comment

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

저희 datapass 메소드 분리하나요? 👀

Copy link
Collaborator

@loinsir loinsir Dec 8, 2023

Choose a reason for hiding this comment

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

엇 저희 지난번에 요 내용 토대로 분리하기로 합의한 게 아니었나요...?

Copy link
Collaborator

Choose a reason for hiding this comment

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

합의요? 따로 의사결정을 한 기억은 없는데.. 일단 알겠습니다~ 나중에 저도 반영하도록 할게요

Copy link
Member Author

Choose a reason for hiding this comment

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

datapass 분리 (inout 사용) vs 그냥 참조해서 변경 두가지 의견이 있었던걸로 기억합니다 !!
둘중에 어떤 방법으로 할지 정확히 정하진 않은 것 같은데 (기억이 가물가물..ㅎ) 지금 정하면 좋을 듯 ?

Copy link
Collaborator

Choose a reason for hiding this comment

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

처음 Clean Swift의 Router의 의도가 데이터 전달 과 네비게이팅 분리라는 관점에서 저는 datapass분리도 괜찮다고 생각해요~ inout을 쓰면 순수함수를 잘 못지키는 것 같아 별로 쓰고 싶지 않았을 뿐, Clean Swift의 의도에 따라가려면 datapass가 더 적합한것 같습니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

이전에 단순 참조해서 변경한 코드들이 있어서, 저도 datapass 메소드 분리하는 방향으로 수정해보겠습니다 :D

Copy link
Collaborator

@loinsir loinsir Dec 8, 2023

Choose a reason for hiding this comment

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

아 이전에 https://clean-swift.com/pass-data-backward-more-elegantly-without-using-delegation/
요 내용 유경님께서 공유해주셨을때, 이견이 없으셔서 전 이렇게 하기로 합의한 것으로 받아들였었습니다...!

Copy link
Member Author

@anyukyung anyukyung Dec 8, 2023

Choose a reason for hiding this comment

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

아 저거는 메소드 보다는 상위 뷰컨트롤러 찾아서 passing하는 방법을 보고 공유했던거라 ㅋㅋㅋㅋ 밑에 메소드를 제대로 안봤었네용
그치만 datapass 메소드를 분리하는 방법이 의도가 명확해서 그렇게 해도 좋을 것 같습니다!

Comment on lines 36 to 42
let posts = try await data.concurrentMap { postDTO -> Models.Post in
let thumbnailImageData = try await self.provider.request(url: postDTO.board.videoThumbnailURL)
return .init(member: postDTO.member.toDomain(),
board: postDTO.board.toDomain(),
tags: postDTO.tag,
thumbnailImageData: thumbnailImageData)
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

우선 Model내에 선언해주신것 좋은 것 같습니다.
저도 처음엔 TaskGroup을 몰라서 concurrentMap으로 하긴 했는데, TaskGroup으로 만드는게 장기적으로 더 좋을 것 같습니다.
리팩토링 할 때 함께 의논해봐요. 아니면 도메인 모델쪽에 따로 빼서 선언해주셔도 좋을 것 같습니다.
명명은 ThumbnailLoadedPost...?

Copy link
Member Author

Choose a reason for hiding this comment

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

모델은 우선 인환님이 추천해주신 ThumbnailLoadedPost로 선언해두고 나머지 interactor들도 ThumbnailLoadedPost 사용하는 것으로 변경되면 그때 Post로 리네임해도 되겠네요 좋습니다 👍

Copy link
Member Author

@anyukyung anyukyung Dec 8, 2023

Choose a reason for hiding this comment

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

또 서버에 문의해본 결과 post의 배열이 지금 따로 유의미하게 정렬되어서 오진 않아서,
말씀하신대로 TaskGroup으로 충분히 개선해볼 수 있을 것 같습니다 !

Copy link
Collaborator

@loinsir loinsir left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 오타? 만 수정하심 될 것 같슴다!!!

@anyukyung anyukyung merged commit 6556ef2 into iOS/dev Dec 8, 2023
1 check passed
@anyukyung anyukyung linked an issue Dec 8, 2023 that may be closed by this pull request
1 task
@anyukyung anyukyung deleted the iOS/feat#226 branch January 10, 2024 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat: 맵핀 하이라이트 개선 feat: 지도 탭 api 연결
3 participants