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 #566

Closed

Conversation

s6m1n
Copy link
Member

@s6m1n s6m1n commented Dec 8, 2024

⭐️ Issue Number

564

🚩 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 23 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
@s6m1n s6m1n closed this Dec 8, 2024
@s6m1n s6m1n deleted the feature/#564-refactor-category-datetime-selection branch December 8, 2024 12:22
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: Done
Development

Successfully merging this pull request may close these issues.

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