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

refactor: 카테고리, 일시 선택 순서 변경 및 리팩터링 (스타카토 생성/수정) #564 #567

Open
wants to merge 45 commits into
base: develop
Choose a base branch
from

Conversation

s6m1n
Copy link
Member

@s6m1n s6m1n commented Dec 8, 2024

⭐️ Issue Number

🚩 Summary

스타카토 생성/수정 화면의 카테고리, 일시 관련 로직에 아래의 작업들을 수행했습니다.

  • 카테고리, 일시 선택 순서 변경
  • 카테고리, 일시 선택 코드 리팩터링
  • 카테고리, 일시 선택 로직 테스트 추가

리팩터링 내용 정리

생성 화면

  1. fetchMemoryCandidates()로 사용자의 모든 추억을 불러와 _memoryCandidates를 업데이트 합니다.
  2. 이 때 _memoryCandidates는 최초 한 번 업데이트된 후엔 변하지 않습니다.
  3. memoryCandidates.observe 람다에서 initMemoryAndVisitedAt()를 수행하여 일시, 추억의 초기값을 세팅합니다.
    1. 메인 화면에서 생성 (memoryId == 0L)
      • 일시 먼저 초기화 → LocalDateTime.now() (선택 가능한 일시 범위는 selectedVisitedAt ±10년)
      • 일시를 기준으로 추억을 초기화 → updateMemoryCandidateAndVisitedAt()
      • 일시가 바뀌면 추억을 다시 세팅
    2. 추억 화면에서 생성 (memoryId를 알고 있는 경우)
      • 추억 먼저 초기화 → memoryId가 일치하는 추억으로 고정
      • 추억을 기준으로 일시를 초기화 → 추억 기간 안에서 'LocalDate.now()'와 가장 인접한 날짜 선택 (MemoryCandidategetClosestDateTime() 참고)
      • 선택 가능한 일시 범위는 추억 기간으로 세팅

수정 화면

  1. 사용자의 모든 추억을 불러옵니다. (fetchMemoryCandidates())
  2. 수정 대상인 스타카토의 정보를 불러옵니다. (fetchStaccatoBy())
  3. 불러온 스타카토 정보로 추억, 일시를 초기화 합니다.
  4. 일시가 바뀌면 추억을 다시 세팅합니다.

🛠️ Technical Concerns

스타카토 생성/수정 ViewModel 테스트

MVVM 구조의 뷰모델 내부 LiveData 값을 테스트하기 위해 아래 Rule을 설정하고 getOrAwaitValue를 추가했습니다.

    @get:Rule
    var instantTaskExecutorRule = InstantTaskExecutorRule()

    @get:Rule
    val mainDispatcherRule = MainDispatcherRule()

또한 mockK의 coEvery와 coroutines.test의 runTest를 사용했습니다.

🙂 To Reviewer

s6m1n added 24 commits December 1, 2024 21:35
 변수명 변경 및 public 함수 리팩터링
- initMemoryAndVisitedAt() : memoryId에 따라 일시, 추억을 초기화
- setMemoryCandidateByVisitedAt() : 일시에 따라 추억을 설정
- initMemoryAndVisitedAt() : 스타카토에 따라 일시, 추억을 초기화
- setMemoryCandidateByVisitedAt() : 일시에 따라 추억을 설정
@s6m1n s6m1n added android We are android>< refactor 리팩토링 (변수 및 메서드 네이밍 변경) ✅ test 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음) labels Dec 8, 2024
@s6m1n s6m1n self-assigned this Dec 8, 2024
@hxeyexn
Copy link
Contributor

hxeyexn commented Dec 13, 2024

@s6m1n
ktlintcheck 확인 한번 부탁드려요!

Copy link
Contributor

@hxeyexn hxeyexn left a comment

Choose a reason for hiding this comment

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

빙티!! 리팩터링과 테스트 작성하느라 너무 고생 많으셨습니다..!
리뷰가 너무 늦었네요 ㅠㅠ 죄송합니다...! 🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️

리뷰를 남기다보니 양이 조금 많아졌는 데 보시다가 이해 안되는 부분 있으시면 언제든 편하게 말씀해주세용! 아직 ViewModelTest는 깊게 보지 못해서 좀 더 보다가 코멘트 남길 부분 있으면 더 남겨두겠습니다~

정말정말 고생 많으셨습니다!! 👍 💯
외쳐 갓티!!!!!!!!!❤️‍🔥

@woowacourse-teams woowacourse-teams deleted a comment from hxeyexn Dec 16, 2024
Copy link
Contributor

@Junyoung-WON Junyoung-WON left a comment

Choose a reason for hiding this comment

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

빙티!! 깃헙에서 보는건 오랜만이에요! 🙋
리뷰가 너무너무너무 늦어진 점 정말 깊이 사죄드립니다...
제가 게으른 탓이니 용서하지 말아요 🥲

수정사항 반영과 리팩터링, 테스트 작성까지 정말, 무지 고생하셨어요!! 변경 사항에 맞춰 잘 구현해주신 것 같아요.
그리고 드디어 우리 프로젝트의 안드로이드에도 테스트가 생겼네요! 야호~ 🥳
코드 양을 보니 시간이 꽤 걸렸을텐데 빠르게 잘 구현해주셨어요! 👍

해나가 이미 많은 부분을 꼼꼼히 잘 짚어준 터라, 변경된 양에 비해서 제가 리뷰드릴 부분이 많지는 않았어요! 그래도 왜 20개나 되나요...
지각한 주제에 조금이라도 도움을 드리고자, 머리를 쥐어짜내서 단 코멘트가 대부분이라...!
너무 부담가지지 않고 시간날 때 천천히 읽어주셨으면 좋겠습니당

그저 갓갓,,, 정말 고생많으셨습니다!! 👏 🔥

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
android We are android>< refactor 리팩토링 (변수 및 메서드 네이밍 변경) ✅ test 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

refactor: 카테고리, 일시 선택 순서 변경 및 리팩터링 (스타카토 생성/수정)
3 participants