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: 프로필 VIP 로직 구현, 네트워크 연결 #216

Merged
merged 12 commits into from
Dec 6, 2023
Merged

Conversation

loinsir
Copy link
Collaborator

@loinsir loinsir commented Dec 5, 2023

🧑‍🚀 PR 요약

  • 프로필 VIP 로직 구현
  • 네트워크 연결, (우선은 Mock으로 붙여둠)

📌 변경 사항

  • 프로필 VIP 로직을 구현했습니다. 네트워크 연결은 우선 MockUserWorker로 처리했습니다.

  • 프로필 뷰에서 게시글 페이징 처리를 구현했습니다. 각 페이지 요청에 따른 더미 데이터도 추가해두었습니다.

    • 각각 PostList.json -> PostListMore.json -> PostListEnd.json 순으로 Mock에서 호출됩니다.
  • 프로필 편집 쪽으로 데이터 넘김 처리를 구현하느라 프로필 편집 뷰쪽 코드를 건드린 부분이 있습니다.

    • 프로필 편집 쪽은 이 이슈 머지되면 새로 이슈 파서 구현하겠습니다.
📸 ScreenShot

Simulator Screen Recording - iPhone 15 Pro - 2023-12-06 at 01 02 21

Linked Issue

close #209

@loinsir loinsir self-assigned this Dec 5, 2023
@loinsir loinsir changed the base branch from release to iOS/dev December 5, 2023 16:04
@loinsir loinsir changed the base branch from iOS/dev to release December 5, 2023 19:18
@loinsir loinsir changed the base branch from release to iOS/dev December 5, 2023 19:18
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.

고생하셨습니다. 딱히 바꿔야할 건 없구 궁금한 점들만 달아놨습니다.

var profileId: Int? { get set }

var playbackStartIndex: Int? { get set }
var posts: [Post] { get set }
Copy link
Collaborator

Choose a reason for hiding this comment

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

Comment on lines +65 to +67
let posts = await fetchPosts()
canFetchMorePosts = !posts.isEmpty
fetchPostsPage += 1
Copy link
Collaborator

Choose a reason for hiding this comment

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

이건 어떤 동작인가요? fetchPostPage?

Copy link
Collaborator Author

@loinsir loinsir Dec 6, 2023

Choose a reason for hiding this comment

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

게시글 가져오는 서버 API가 달라져서 이제 페이징 처리를 하기 위해서 입니다.
몇번째 페이지를 받아올 지 서버 인자로 넘겨주어야 해서, 받아오고 나면 다음 페이지 요청을 위해 값을 1 증가시킵니다.
만약 받아온 데이터가 빈 배열이면 더 이상 가져올 데이터가 없는 것으로 판단하고 canFetchMorePosts 값이 false로 설정되어서 요청을 더이상 못하게 됩니다.

return collectionView
}()

private var videoDatasource: UICollectionViewDiffableDataSource<Section, AnyHashable>?
private var collectionViewDatasource: UICollectionViewDiffableDataSource<Section, AnyHashable>?
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
Collaborator Author

@loinsir loinsir Dec 6, 2023

Choose a reason for hiding this comment

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

이 부분은 유경님께서 짜신 부분인데, AnyHashable로 하신 이유가 프로필을 표시하는 부분과 아래쪽 영상 썸네일 표시하는 부분의 셀 타입이 다른데, 두 가지 타입의 셀을 한 컬렉션 뷰에서 사용하기 위함으로 파악했습니다.

Copy link
Member

Choose a reason for hiding this comment

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

엇 인환님께서 말씀하신 의도가 맞습니다 !!

let height = scrollView.bounds.height

if scrollOffset > contentHeight - height {
fetchPosts()
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
Collaborator Author

@loinsir loinsir Dec 6, 2023

Choose a reason for hiding this comment

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

처음 뷰컨이 로드되었을 때, 프로필 + 게시글 1페이지를 불러오는 메서드, 스크롤 아래로 내려서 다음 게시글 페이지를 불러오는 메서드 두가지로 유스케이스가 정의되는데, 두 메서드에서 게시글을 가져오는 로직이 겹치기 때문에 메서드를 분리했습니다.

@@ -9,14 +9,16 @@
import Foundation

protocol UserEndPointFactory {
func makeUserNameIsDuplicateEndPoint(of userName: String) -> EndPoint<Response<CheckUserNameDTO>>
func makeUserNameIsNotDuplicateEndPoint(of userName: String) -> EndPoint<Response<CheckUserNameDTO>>
Copy link
Member

Choose a reason for hiding this comment

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

..valid의 부정의 부정의 부정의 부정의.. ㅎㅎ

Comment on lines +29 to +30
case profile
case posts
Copy link
Member

Choose a reason for hiding this comment

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

👍

Comment on lines +176 to +184
// MARK: - Use Case

private func fetchProfile() {
interactor?.fetchProfile(with: Models.FetchProfile.Request())
}

private func fetchPosts() {
interactor?.fetchMorePosts(with: Models.FetchMorePosts.Request())
}
Copy link
Member

Choose a reason for hiding this comment

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

오 interactor 호출하는 함수를 따로 다 분리하셨네요 ?? 이것도 컨벤션 맞추면 좋을 것 같아요!
이렇게 하는게 더 깔끔해보이는데 함수 한개만 호출을 하는 메소드를 추가적으로 만들어야 할까 싶기도하네요 !

Copy link
Collaborator Author

@loinsir loinsir Dec 6, 2023

Choose a reason for hiding this comment

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

viewDidLoad 같은 Life Cycle 메서드에 쌩으로 실행문이 들어가는게 싫어서요 ㅎㅎ 아마 저희 코딩컨벤션?에 했었나
그 이외에 setUI 같은 곳에서는 가차없이 넣었습니다.

Copy link
Member

@anyukyung anyukyung left a comment

Choose a reason for hiding this comment

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

수고하셨습니당 😎

@loinsir loinsir merged commit 1607a0b into iOS/dev Dec 6, 2023
1 check passed
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: 프로필 VIP 로직 구현, 네트워크 연결
3 participants