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

refact :: [#117] 주말급식 리팩토링 #123

Merged
merged 4 commits into from
Nov 19, 2024

Conversation

cyj513
Copy link
Collaborator

@cyj513 cyj513 commented Nov 19, 2024

개요

  • 주말급식 리팩토링

작업사항

  • 주말급식 리팩토링

UI

close #117

Summary by CodeRabbit

  • 새로운 기능

    • 학교 급식 데이터 구조가 간소화되어 가독성이 향상되었습니다.
    • 알림 모달의 시각적 표현 스타일이 개선되었습니다.
  • 버그 수정

    • 알림 표시 방식의 변경으로 사용자 경험이 개선되었습니다.
  • 문서화

    • UI 구성 요소의 가시성 및 레이아웃 관련 코드가 정리되었습니다.
  • 리팩토링

    • HomeViewControllerSchoolMealViewModel의 데이터 바인딩 로직이 간소화되었습니다.
    • PiCKAlert 클래스의 초기화 메서드가 개선되었습니다.
    • BaseViewController의 레이아웃 관리 로직이 개선되었습니다.

@cyj513 cyj513 added the REFACT 리팩토링을 할 경우 label Nov 19, 2024
@cyj513 cyj513 self-assigned this Nov 19, 2024
Copy link

coderabbitai bot commented Nov 19, 2024

Caution

Review failed

The pull request is closed.

Walkthrough

이 풀 리퀘스트는 여러 파일에서의 구조체 및 클래스 수정 사항을 포함하고 있습니다. SchoolMealDTOElementSchoolMealEntityElement의 프로퍼티 선언이 간소화되었고, mealBundle의 데이터 구조가 변경되었습니다. PiCKAlert 클래스의 모달 프레젠테이션 스타일이 업데이트되었으며, BaseViewController의 메서드가 리네임되었습니다. HomeViewControllerHomeViewModel에서는 데이터 바인딩 로직이 수정되었고, OnboardingViewController에서는 UI 컴포넌트가 제거되었습니다. 마지막으로, SchoolMealViewController의 데이터 바인딩 로직이 변경되었습니다.

Changes

파일 경로 변경 요약
Projects/Data/Sources/DTO/SchoolMeal/SchoolMealDTO.swift SchoolMealDTOElement의 프로퍼티 선언이 간소화되고, toDomain() 메서드에서 튜플 구조가 문자열 리터럴로 변경됨.
Projects/Domain/Sources/Entity/SchoolMeal/SchoolMealEntity.swift SchoolMealEntityElementmealBundle 프로퍼티와 초기화 메서드의 타입이 변경됨.
Projects/Modules/DesignSystem/Sources/Component/Alert/PiCKAlert.swift PiCKAlert 클래스의 모달 전환 스타일이 .crossDissolve.overFullScreen으로 설정됨.
Projects/Presentation/Sources/Base/BaseViewController.swift viewDidLayoutSubviews 메서드가 viewWillLayoutSubviews로 리네임되고, 새로운 메서드가 추가됨.
Projects/Presentation/Sources/Scene/Home/HomeViewController.swift timeTableHeight 프로퍼티가 100으로 변경되고, 바인딩 로직이 수정됨.
Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift schoolMealData 프로퍼티가 튜플 구조에서 정수 부분이 제거됨.
Projects/Presentation/Sources/Scene/OnBoarding/OnBoardingViewController.swift UI 컴포넌트가 주석 처리되고, 로딩 상태 관리 로직이 조정됨.
Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewController.swift 바인딩 로직에서 데이터 접근 방식이 변경됨.
Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewModel.swift schoolMealData 프로퍼티가 튜플 구조에서 정수 부분이 제거됨.

Assessment against linked issues

Objective Addressed Explanation
주말 급식 셀 크기 동적으로 변경 해당 변경 사항이 코드에 포함되어 있지 않음.
자잘한 디자인 수정 디자인 수정 사항이 명확하지 않음.

🐇 변화의 바람이 불어와
급식의 맛이 더욱 좋아져요!
코드가 간결해지고,
UI도 새롭게 빛나죠.
함께 뛰어놀며,
즐거운 급식 시간 기대해요!
🥕✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (7)
Projects/Domain/Sources/Entity/SchoolMeal/SchoolMealEntity.swift (1)

14-16: 문서화 개선 제안

초기화 메서드에 각 매개변수의 의미와 예상되는 값 형식에 대한 문서 주석을 추가하면 좋을 것 같습니다.

+    /// 급식 번들을 초기화합니다.
+    /// - Parameter mealBundle: 급식 정보 배열 [(식사 종류, 식사 상세 정보)]
+    /// 예시: [("아침", MealEntityElement), ("점심", MealEntityElement)]
     public init(mealBundle: [(String, MealEntityElement)]) {
         self.mealBundle = mealBundle
     }
Projects/Data/Sources/DTO/SchoolMeal/SchoolMealDTO.swift (1)

29-31: 식사 타입을 문자열로 표현한 것이 더 명확합니다.

숫자 인덱스 대신 "조식", "중식", "석식"과 같은 명확한 문자열을 사용함으로써 코드의 가독성이 크게 향상되었습니다. 이는 도메인 용어를 더 잘 반영하며, 향후 유지보수도 더 쉬워질 것으로 보입니다.

추가적인 개선사항으로, 이러한 식사 타입 문자열을 열거형으로 정의하는 것을 고려해보시면 좋을 것 같습니다:

enum MealType: String {
    case breakfast = "조식"
    case lunch = "중식"
    case dinner = "석식"
}
Projects/Presentation/Sources/Base/BaseViewController.swift (1)

38-46: 뷰 레이아웃 생명주기 메서드의 책임 분리가 잘 되었습니다! 👍

레이아웃 관련 메서드의 실행 시점을 명확하게 분리한 것이 좋은 설계입니다:

  • viewWillLayoutSubviews: 초기 뷰 계층 구조 설정
  • viewDidLayoutSubviews: 네비게이션 바 및 데이터 기반 레이아웃 조정

이러한 분리는 서브클래스에서 각 단계를 더 명확하게 재정의할 수 있게 해주며, UIKit의 뷰 레이아웃 생명주기를 더 잘 활용하고 있습니다.

Projects/Modules/DesignSystem/Sources/Component/Alert/PiCKAlert.swift (2)

70-71: 모달 프레젠테이션 스타일이 적절하게 설정되었습니다.

크로스 디졸브 트랜지션과 오버 풀스크린 프레젠테이션은 알림 UI에 적합한 선택입니다.

접근성 향상을 위해 다음과 같은 개선을 고려해보세요:

 self.modalTransitionStyle = .crossDissolve
 self.modalPresentationStyle = .overFullScreen
+self.view.accessibilityViewIsModal = true
+self.backgroundView.accessibilityLabel = titleText

Line range hint 18-18: 클로저 이름을 더 일반적인 용도로 변경하는 것이 좋겠습니다.

clickLogout이라는 이름은 특정 기능에 한정되어 있습니다. 알림이 다양한 상황에서 재사용될 수 있도록 더 일반적인 이름을 사용하는 것이 좋겠습니다.

다음과 같이 변경을 제안합니다:

-public var clickLogout: () -> Void
+public var onConfirm: () -> Void

이에 따라 bindActions() 메서드도 수정이 필요합니다:

 confirmButton.rx.tap
     .bind { [weak self] in
         self?.dismiss(animated: true) {
-            self?.clickLogout()
+            self?.onConfirm()
         }
     }.disposed(by: disposeBag)
Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewController.swift (1)

61-70: 튜플 대신 명시적 타입 사용 권장

현재 튜플을 사용하여 데이터를 전달하고 있는데, 이는 코드의 가독성과 타입 안전성을 저하시킬 수 있습니다. 명시적인 타입을 사용하는 것이 더 좋은 방법일 것 같습니다.

다음과 같은 리팩토링을 제안합니다:

- output.schoolMealData
+ // MealTimeData 타입 정의
+ struct MealTimeData {
+     let mealTime: String
+     let mealInfo: MealEntityElement
+ }

+ // ViewModel에서 반환하는 타입을 변경
+ output.schoolMealData
    .asObservable()
    .bind(to: schoolMealCollectionView.rx.items(
        cellIdentifier: SchoolMealCollectionViewCell.identifier,
        cellType: SchoolMealCollectionViewCell.self
-   )) { _, item, cell in
+   )) { _, mealData, cell in
        cell.setup(
-           mealTime: item.0,
-           menu: item.1.menu,
-           kcal: item.1.kcal
+           mealTime: mealData.mealTime,
+           menu: mealData.mealInfo.menu,
+           kcal: mealData.mealInfo.kcal
        )
    }
Projects/Presentation/Sources/Scene/Home/HomeViewController.swift (1)

313-322: setupViewType 메서드의 리팩토링이 잘 이루어졌습니다

기존의 switch 문을 boolean 로직으로 단순화한 것은 좋은 개선입니다. 코드가 더 간결하고 이해하기 쉬워졌습니다.

몇 가지 추가적인 개선 포인트를 제안드립니다:

  1. 상수로 분리된 isTimeTable 변수의 활용이 좋습니다
  2. 뷰의 가시성 설정이 더 명확해졌습니다

스냅킷 제약조건 설정 부분을 별도 메서드로 분리하는 것을 고려해보세요:

+private func updateMainStackViewConstraints(height: CGFloat) {
+    mainStackView.snp.remakeConstraints {
+        $0.height.equalTo(height)
+    }
+}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between df60ebf and ff2bb36.

📒 Files selected for processing (10)
  • Projects/Data/Sources/DTO/SchoolMeal/SchoolMealDTO.swift (1 hunks)
  • Projects/Domain/Sources/Entity/SchoolMeal/SchoolMealEntity.swift (1 hunks)
  • Projects/Modules/DesignSystem/Sources/Component/Alert/PiCKAlert.swift (1 hunks)
  • Projects/Presentation/Sources/Base/BaseViewController.swift (1 hunks)
  • Projects/Presentation/Sources/Scene/AllTab/AllTabViewController.swift (0 hunks)
  • Projects/Presentation/Sources/Scene/Home/HomeViewController.swift (3 hunks)
  • Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift (2 hunks)
  • Projects/Presentation/Sources/Scene/OnBoarding/OnBoardingViewController.swift (0 hunks)
  • Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewController.swift (1 hunks)
  • Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewModel.swift (2 hunks)
💤 Files with no reviewable changes (2)
  • Projects/Presentation/Sources/Scene/AllTab/AllTabViewController.swift
  • Projects/Presentation/Sources/Scene/OnBoarding/OnBoardingViewController.swift
🔇 Additional comments (3)
Projects/Data/Sources/DTO/SchoolMeal/SchoolMealDTO.swift (1)

22-22: 속성 선언 간소화가 잘 되었습니다!

Swift의 간결한 문법을 활용하여 코드를 더욱 깔끔하게 만들었습니다.

Projects/Presentation/Sources/Scene/SchoolMeal/SchoolMealViewModel.swift (2)

26-26: 데이터 구조가 단순화되었습니다.

Int 타입의 인덱스를 제거함으로써 데이터 구조가 더 명확해졌습니다. 이는 주말 급식 기능의 유지보수성을 향상시킬 것으로 보입니다.


29-29: private 프로퍼티의 데이터 타입이 일관되게 변경되었습니다.

Output 구조체의 변경사항과 일치하도록 BehaviorRelay의 타입이 적절히 수정되었습니다.

@@ -9,9 +9,9 @@ public struct SchoolMealEntity {
}

public struct SchoolMealEntityElement {
public let mealBundle: [(Int, String, MealEntityElement)]
public let mealBundle: [(String, MealEntityElement)]
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

데이터 구조 마이그레이션이 완료되지 않았습니다

HomeSchoolMealView에서 여전히 이전 데이터 구조 [(Int, String, MealEntityElement)]를 사용하고 있습니다. 다음 위치에서 업데이트가 필요합니다:

  • Projects/Presentation/Sources/Scene/Home/View/HomeSchoolMealView.swift:
    • schoolMealData BehaviorRelay의 타입을 [(String, MealEntityElement)]로 변경
    • setup 메서드의 파라미터 타입을 [(String, MealEntityElement)]로 변경
    • bind 메서드 내 cell setup 로직을 새로운 구조에 맞게 수정 (item.1 대신 item.0 사용)
🔗 Analysis chain

데이터 구조 단순화 검증 필요

mealBundle의 타입이 [(Int, String, MealEntityElement)]에서 [(String, MealEntityElement)]로 변경되었습니다. 이는 좋은 리팩토링이지만, 모든 의존성이 올바르게 업데이트되었는지 확인이 필요합니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all usages of SchoolMealEntityElement have been updated

# Search for any remaining references to the old tuple structure
rg -l "[(]Int,\s*String,\s*MealEntityElement[)]" 

# Find all files that might be using this structure
fd -e swift -x grep -l "SchoolMealEntityElement"

Length of output: 296


Script:

#!/bin/bash
# Check the content of HomeSchoolMealView.swift which still has references to old structure
cat "Projects/Presentation/Sources/Scene/Home/View/HomeSchoolMealView.swift"

# Check SchoolMealDTO.swift for any related changes
cat "Projects/Data/Sources/DTO/SchoolMeal/SchoolMealDTO.swift"

Length of output: 2909

Comment on lines +40 to +42
.bind { data in
self.schoolMealData.accept(data.meals.mealBundle)
}
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

셀 크기가 고정값으로 설정되어 있습니다

SchoolMealViewController에서 CollectionView의 셀 크기가 width: view.frame.width - 48, height: 154로 고정되어 있습니다. 동적 크기 조정이 필요한 경우 다음 사항들을 고려해야 합니다:

  • 메뉴 텍스트 길이에 따른 셀 높이 동적 조정
  • UICollectionViewDelegateFlowLayout 프로토콜 구현
  • estimatedItemSize 또는 sizeForItemAt 메서드 활용
🔗 Analysis chain

RxSwift 바인딩이 개선되었습니다.

subscribe(onNext:) 대신 bind를 사용하여 코드가 더 간결해졌습니다. 하지만 동적 셀 크기 조정과 관련된 요구사항이 반영되었는지 확인이 필요합니다.

셀 크기 조정 관련 코드를 확인하기 위해 다음 스크립트를 실행합니다:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: 셀 크기 조정 관련 코드 확인

# SchoolMealViewController에서 셀 크기 조정 관련 코드 검색
rg -t swift "cell.*size|size.*cell" 

# UICollectionViewDelegateFlowLayout 구현 확인
ast-grep --pattern 'class $_ : $_ {
  $$$
  collectionView($_, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) {
    $$$
  }
  $$$
}'

Length of output: 183


Script:

#!/bin/bash
# SchoolMealViewController 파일 내용 확인
fd "SchoolMealViewController.swift" --exec cat {}

# UICollectionView 관련 설정 검색
rg -t swift "UICollectionView.*delegate|collectionView.*delegate" 

# 셀 크기 관련 코드 검색 (더 넓은 범위)
rg -t swift "itemSize|sizeForItem|estimatedItem"

Length of output: 5967

Comment on lines +61 to +70
output.schoolMealData
.asObservable()
.bind(to: schoolMealCollectionView.rx.items(
cellIdentifier: SchoolMealCollectionViewCell.identifier,
cellType: SchoolMealCollectionViewCell.self
)) { _, item, cell in
cell.setup(
mealTime: item.1,
menu: item.2.menu,
kcal: item.2.kcal
mealTime: item.0,
menu: item.1.menu,
kcal: item.1.kcal
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

주말 급식 셀 크기 동적 조정 구현 필요

PR 목표에서 언급된 주말 급식 셀 크기의 동적 조정이 구현되지 않았습니다. 현재 collectionViewFlowLayout에서 고정된 크기를 사용하고 있습니다.

다음과 같은 구현을 제안합니다:

- private lazy var collectionViewFlowLayout = UICollectionViewFlowLayout().then {
-     $0.itemSize = .init(
-         width: self.view.frame.width - 48,
-         height: 154
-     )
-     $0.minimumLineSpacing = 20
- }

+ private lazy var collectionViewFlowLayout = UICollectionViewFlowLayout().then {
+     $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
+     $0.minimumLineSpacing = 20
+ }

+ // SchoolMealCollectionViewCell에서 구현
+ override func preferredLayoutAttributesFitting(
+     _ layoutAttributes: UICollectionViewLayoutAttributes
+ ) -> UICollectionViewLayoutAttributes {
+     let targetSize = CGSize(
+         width: layoutAttributes.frame.width,
+         height: UIView.layoutFittingCompressedSize.height
+     )
+     layoutAttributes.frame.size = contentView.systemLayoutSizeFitting(
+         targetSize,
+         withHorizontalFittingPriority: .required,
+         verticalFittingPriority: .fittingSizeLevel
+     )
+     return layoutAttributes
+ }

Committable suggestion skipped: line range outside the PR's diff.

@@ -62,7 +62,7 @@ public class HomeViewModel: BaseViewModel, Stepper {
let applyStatusData: Signal<HomeApplyStatusEntity>
let weekendMealPeriodData: Signal<WeekendMealPeriodEntity>
let timetableData: Driver<[TimeTableEntityElement]>
let schoolMealData: Driver<[(Int, String, MealEntityElement)]>
let schoolMealData: Driver<[(String, MealEntityElement)]>
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

HomeSchoolMealView에서 타입 불일치 발견

HomeViewModel에서 변경된 schoolMealData: [(String, MealEntityElement)] 타입이 HomeSchoolMealView에서 여전히 [(Int, String, MealEntityElement)]로 사용되고 있습니다. 다음 파일들의 수정이 필요합니다:

  • Projects/Presentation/Sources/Scene/Home/View/HomeSchoolMealView.swift
    • private let schoolMealData 프로퍼티의 타입을 [(String, MealEntityElement)]로 변경
    • setup 메서드의 파라미터 타입을 [(String, MealEntityElement)]로 변경
    • bind 메서드에서 cell.setup 호출 시 item.1 대신 item.0 사용
🔗 Analysis chain

데이터 구조 단순화 승인

튜플에서 Int 타입을 제거하여 데이터 구조를 단순화한 것은 좋은 변경사항입니다. 이는 주말 급식 리팩토링의 목적에 잘 부합하며, DTO와 Entity의 변경사항과도 일관성이 있습니다.

다음 스크립트를 실행하여 HomeViewModel의 schoolMealData를 사용하는 모든 곳이 새로운 타입으로 업데이트되었는지 확인하겠습니다:

Also applies to: 79-79

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: HomeViewModel.schoolMealData의 사용처 확인

# HomeViewModel.schoolMealData를 사용하는 모든 파일 검색
rg -l "schoolMealData.*\(Int,\s*String,\s*MealEntityElement\)" --type swift

# View에서의 바인딩 코드 검색
rg "bind\(to:.*schoolMealData\)" --type swift -A 3

Length of output: 201


Script:

#!/bin/bash
# HomeSchoolMealView.swift 파일의 내용을 확인하여 타입 변경이 필요한지 검사
cat "Projects/Presentation/Sources/Scene/Home/View/HomeSchoolMealView.swift"

# schoolMealData 관련 바인딩 코드를 더 넓은 컨텍스트로 검색
rg "schoolMealData" --type swift -B 2 -A 2

Length of output: 9142

Comment on lines +243 to 246
if height != 0 {
owner.timeTableHeight.accept(height)
}

Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

timeTableHeight 바인딩 로직 개선 제안

height가 0이 아닐 때만 timeTableHeight를 업데이트하는 로직이 추가되었습니다. 하지만 이 접근 방식에는 몇 가지 고려사항이 있습니다:

  1. height가 0인 경우의 처리가 명시적이지 않습니다
  2. 이전 값이 유지되는 상황에 대한 고려가 필요합니다

다음과 같은 개선을 제안드립니다:

-if height != 0 {
-    owner.timeTableHeight.accept(height)
-}
+let newHeight = height != 0 ? height : owner.timeTableHeight.value
+owner.timeTableHeight.accept(newHeight)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if height != 0 {
owner.timeTableHeight.accept(height)
}
let newHeight = height != 0 ? height : owner.timeTableHeight.value
owner.timeTableHeight.accept(newHeight)

@@ -25,7 +23,7 @@ public class HomeViewController: BaseViewController<HomeViewModel> {
width: self.view.frame.width,
height: 0
)
private lazy var timeTableHeight = BehaviorRelay<CGFloat>(value: 0)
private lazy var timeTableHeight = BehaviorRelay<CGFloat>(value: 100)
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

timeTableHeight 초기값 변경은 의도적이지 않은 것으로 보입니다

HomeViewModel에서 timeTableHeight는 0으로 초기화되어 시간표 데이터에 따라 동적으로 계산됩니다 (데이터 개수 * 55). ViewController에서 100으로 하드코딩된 초기값은 이 로직과 충돌할 수 있습니다.

  • Projects/Presentation/Sources/Scene/Home/HomeViewController.swift: timeTableHeight 초기값을 0으로 되돌려야 합니다
  • Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift: ViewModel에서 실제 높이를 계산하여 설정하는 로직이 이미 구현되어 있습니다
🔗 Analysis chain

timeTableHeight의 초기값 변경에 대한 검토 필요

timeTableHeight의 초기값이 0에서 100으로 변경되었습니다. 이는 시간표 뷰의 초기 렌더링에 영향을 줄 수 있습니다.

초기값 변경이 의도적인지 확인이 필요합니다. 다음 스크립트로 다른 뷰컨트롤러에서의 영향도를 확인해보세요:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# timeTableHeight 사용 패턴 검색
rg -A 3 "timeTableHeight.*value.*=.*0" --type swift

Length of output: 53


Script:

#!/bin/bash
# timeTableHeight 관련 패턴을 더 넓게 검색
rg "timeTableHeight" --type swift -A 5 -B 5

Length of output: 8441


Script:

#!/bin/bash
# BehaviorRelay 초기화 패턴 검색
rg "BehaviorRelay.*value.*\d+" --type swift

Length of output: 1587


Script:

#!/bin/bash
# HomeViewController에서 timeTableHeight 사용 확인
ast-grep --pattern 'timeTableHeight.accept($$$)'

Length of output: 50

@cyj513 cyj513 merged commit 1f73b94 into develop Nov 19, 2024
@cyj513 cyj513 deleted the feature/117-school_meal_refact branch November 19, 2024 01:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
REFACT 리팩토링을 할 경우
Projects
None yet
Development

Successfully merging this pull request may close these issues.

주말 급식 리팩토링
1 participant