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

PostSearch 관련 에러 고치는중.. #173

Open
bdrsky2010 opened this issue Apr 12, 2024 · 9 comments · Fixed by #177
Open

PostSearch 관련 에러 고치는중.. #173

bdrsky2010 opened this issue Apr 12, 2024 · 9 comments · Fixed by #177
Assignees
Labels
버그 무엇인가가 잘못되었다. 수정 코드 리팩토링 수행

Comments

@bdrsky2010
Copy link
Contributor

No description provided.

@bdrsky2010 bdrsky2010 added 버그 무엇인가가 잘못되었다. 수정 코드 리팩토링 수행 labels Apr 12, 2024
@bdrsky2010 bdrsky2010 self-assigned this Apr 12, 2024
@bdrsky2010
Copy link
Contributor Author

🙏🏻 문제

textField에 submit 즉 검색 버튼을 같은 검색 text로 계속 누르면 동일한 검색 결과에 대해 계속 추가가 되는 현상�

🔥 원인

textField에 submit 즉 검색 버튼을 눌러버리면 textField의 text 값을 통해 검색하여 계속 같은 배열에 append 해버리면서 생기는 현상

💥 해결

image

image

textField에 submit 즉 검색 버튼을 누를 경우 배열을 한 번씩 지우면서 다시 검색결과를 append하는 방식으로 일단은 해결

@bdrsky2010
Copy link
Contributor Author

🙏🏻 문제

“ph” 검색 → 작성자: 5개, 술 태그: 0개, 음식 태그: 0개

작성자로 들어가서 postDetailView의 foodTags 보고 돌아옴

검색창 작성자: 5개, 술태그: 0개, 음식 태그: 1개 로 음식 태그가 늘어나버림

🔥 원인

먼저 postView의 PostInfo 뷰에서 검색을 하게 되면 3개의 배열에 검색 결과를 필터링해서 담는다

  1. 이름
  2. 음식태그

1 or 2 or 3을 통해 PostDetailView로 넘어가 음식태그를 눌러 NavigationPostView로 넘어갈 경우

image

위의 코드 getSearchedPosts 메서드에서 음식태그에 대해 파이어베이스에서 또 검색을 하고 그 검색결과를 위에서 언급한 3개의 배열중 음식태그 검색 배열에 같이 append해버리는 바람에 Navigation에서 back해서 검색결과 List로 가면 음식태그 검색 결과에 1개가 추가되어버리는 것이다.

💥 해결

흐음 어떻게 해야할까…

@bdrsky2010
Copy link
Contributor Author

🙏🏻 문제

계속 음식 태그로 타고 타고 가다보면 전체 Post가 배열에 추가되어 보여진다

🔥 원인

💥 해결

@bdrsky2010
Copy link
Contributor Author

bdrsky2010 commented Apr 14, 2024

🙏🏻 문제

“ph” 검색 → 작성자: 5개, 술 태그: 0개, 음식 태그: 0개

작성자로 들어가서 postDetailView의 foodTags 보고 돌아옴

검색창 작성자: 5개, 술태그: 0개, 음식 태그: 1개 로 음식 태그가 늘어나버림

🔥 원인

먼저 postView의 PostInfo 뷰에서 검색을 하게 되면 3개의 배열에 검색 결과를 필터링해서 담는다

  1. 이름
  2. 음식태그

1 or 2 or 3을 통해 PostDetailView로 넘어가 음식태그를 눌러 NavigationPostView로 넘어갈 경우

image

위의 코드 getSearchedPosts 메서드에서 음식태그에 대해 파이어베이스에서 또 검색을 하고 그 검색결과를 위에서 언급한 3개의 배열중 음식태그 검색 배열에 같이 append해버리는 바람에 Navigation에서 back해서 검색결과 List로 가면 음식태그 검색 결과에 1개가 추가되어버리는 것이다.

💥 해결

흐음 어떻게 해야할까…

생각해본 솔루션
첫 번째로 결정
image

@bdrsky2010
Copy link
Contributor Author

🙏🏻 문제

“ph” 검색 → 작성자: 5개, 술 태그: 0개, 음식 태그: 0개
작성자로 들어가서 postDetailView의 foodTags 보고 돌아옴
검색창 작성자: 5개, 술태그: 0개, 음식 태그: 1개 로 음식 태그가 늘어나버림

🔥 원인

먼저 postView의 PostInfo 뷰에서 검색을 하게 되면 3개의 배열에 검색 결과를 필터링해서 담는다

  1. 이름
  2. 음식태그

1 or 2 or 3을 통해 PostDetailView로 넘어가 음식태그를 눌러 NavigationPostView로 넘어갈 경우
image
위의 코드 getSearchedPosts 메서드에서 음식태그에 대해 파이어베이스에서 또 검색을 하고 그 검색결과를 위에서 언급한 3개의 배열중 음식태그 검색 배열에 같이 append해버리는 바람에 Navigation에서 back해서 검색결과 List로 가면 음식태그 검색 결과에 1개가 추가되어버리는 것이다.

💥 해결

흐음 어떻게 해야할까…

생각해본 솔루션 첫 번째로 결정 image

  • root에 있는 PostView의 Post 배열은 Listener를 구독해두고 실시간으로 데이터 처리
  • 검색해서 가져오는 결과 즉, NavigationPostView에서 들고있는 State형태의 Post 배열은 View가 NavigationStack에 Push 되는 시점에 파이어베이스에서 데이터를 Fetch 처리

@bdrsky2010
Copy link
Contributor Author

  • PostDetailView.swift
// Post 실시간 처리로 인한 코드 주석처리
// await postViewModel.fetchFirstPost()

@bdrsky2010
Copy link
Contributor Author

  • PostView.swift
.task {
	if postViewModel.posts.isEmpty {
                 await postViewModel.fetchFirstPost() // 첫 술상 페이지 진입 시 Post 패치
		await postViewModel.startListening() // Post 실시간 Listener 구독 시작
	}
}

@bdrsky2010
Copy link
Contributor Author

파이어베이스 PostView를 위한 실시간 처리

  • PostViewModel.swift
func startListening() async {
	listener = db.collection(postCollection).addSnapshotListener { querySnapshot, error in
		guard let snapshot = querySnapshot, error == nil else {
			print("Error fetching snapshots: \(error!)")
			return
		}
		
		snapshot.documentChanges.forEach { diff in
			do {
				// 게시글이 추가된 경우, 술상 정렬타입이 인기순이라면 배열의 0번째에 추가
				if diff.type == .added, self.selectedSegmentIndex == 1 {
					let postField = try diff.document.data(as: PostField.self)
					self.posts.insert(Post(postField: postField, likedUsersID: []), at: 0)
				}
				// 게시글이 수정된 경우, 해당 게시글이 배열에 존재하면 해당 인덱스에 수정사항 반영
				if diff.type == .modified {
					let postField = try diff.document.data(as: PostField.self)
					if let index = self.posts.firstIndex(where: { $0.postField.postID == postField.postID }) {
						self.posts[index].postField = postField
					}
				}
				// 게시글이 삭제된 경우, 해당 게시글이 배열에 존재하면 배열에서 삭제
				if diff.type == .removed {
					let postField = try diff.document.data(as: PostField.self)
					if let index = self.posts.firstIndex(where: { $0.postField.postID == postField.postID }) {
						self.posts.remove(at: index)
					}
				}
			} catch {
				print(error.localizedDescription)
			}
		}
	}
}

@bdrsky2010
Copy link
Contributor Author

🙏🏻 문제

계속 음식 태그로 타고 타고 가다보면 전체 Post가 배열에 추가되어 보여진다

🔥 원인

💥 해결

위의 문제를 해결하면 같이 해결된다

@bdrsky2010 bdrsky2010 changed the title PostSerach 관련 에러 고치는중.. PostSearch 관련 에러 고치는중.. Apr 22, 2024
@withseon withseon linked a pull request Apr 22, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
버그 무엇인가가 잘못되었다. 수정 코드 리팩토링 수행
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant