Skip to content

Conversation

@dev-domo
Copy link
Collaborator

@dev-domo dev-domo commented Nov 6, 2025

✅ PR 타입

  • refactor: 코드 리펙토링

🪾 반영 브랜치

refactor/#79-secondQA

✨ 변경 사항

QA 사항을 반영했습니다

📂 관련 이슈

#79

@dev-domo dev-domo self-assigned this Nov 6, 2025
@dev-domo dev-domo added the enhancement New feature or request label Nov 6, 2025
@gemini-code-assist
Copy link

Summary of Changes

Hello @dev-domo, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 1차 QA 피드백을 반영하여 코드 리팩토링 및 기능 개선에 중점을 두었습니다. 주요 변경 사항으로는 더욱 견고하고 중앙화된 오류 처리 메커니즘, 새로운 모달 및 토스트 메시지를 통한 사용자 피드백 강화, 캘린더 및 알림 시스템의 개선이 있습니다. 또한, 사용자 경험 향상을 위해 다양한 UI 컴포넌트가 업데이트되었으며, 미션 관리 로직에 새로운 유효성 검사 규칙이 추가되었습니다.

Highlights

  • 오류 처리 개선: 중복 코드 제거를 위해 NetworkRequestErrorHandler 프로토콜을 도입하여 loginExpiredtooManyRequest 오류를 중앙에서 처리하도록 개선했습니다.
  • 모달 및 토스트 메시지 기능 추가: 새로운 ModalType 케이스(tooManyRequest, eventPushAgree)를 추가하고, 사용자에게 일시적인 정보를 제공하는 ToastMessageType, ToastMessageView, ToastPresentable를 포함한 토스트 메시지 시스템을 구현했습니다.
  • 캘린더 기능 향상: CalendarViewController에서 firstDate로부터 두 달 이내로만 월 이동을 제한하고, 날짜 선택 시 자동으로 캘린더가 닫히도록 기능을 개선했습니다.
  • 알림 관리 강화: 앱이 종료될 때 알림이 울리지 않을 수 있음을 사용자에게 알리는 pushTerminateNotification 기능을 AppDelegate에 추가했습니다.
  • UI/UX 조정: AlarmAuthorizationView, LocationAuthorizationView, LoginView, HomeHeaderView, UserScenarioModalView, SettingMissionView, SettingNoticeView, PolicyView, SupportView 등 여러 UI 컴포넌트에서 사용자 경험을 개선하기 위한 시각적 및 레이아웃 조정을 진행했습니다.
  • 미션 관리 로직 개선: HomeViewModelSettingScenarioViewController에 미션 개수 제한(최대 20개) 및 정렬 로직을 추가하여 미션 관리를 강화했습니다.
  • 문자열 유틸리티 확장: 텍스트 처리 및 유효성 검사를 위해 isBlank, removeTrailingSpaces, removeLeadingSpaces와 같은 새로운 문자열 확장 기능을 추가했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

이번 PR은 QA 피드백을 반영하여 앱 전반에 걸쳐 많은 개선이 이루어졌네요. 특히 NetworkRequestErrorHandler 프로토콜을 도입하여 반복적인 에러 처리 코드를 중앙에서 관리하도록 리팩토링한 점이 인상적입니다. 이를 통해 코드의 유지보수성과 가독성이 크게 향상될 것 같습니다. 또한, 토스트 메시지, 캘린더, 모달 등 공통 컴포넌트의 재사용성을 높인 점도 좋습니다. 몇 가지 추가 개선 사항을 제안 드리니 확인 부탁드립니다.

Comment on lines +75 to +78
if let viewController = rootViewController as? HomeViewController {
return viewController
}
return UINavigationController(rootViewController: rootViewController)

Choose a reason for hiding this comment

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

high

HomeViewControllerUINavigationController로 감싸지 않는 특별한 처리를 하고 있습니다. 다른 탭의 뷰 컨트롤러들은 UINavigationController로 감싸져 있어 일관성이 부족하며, 향후 홈 탭에서 네비게이션 기능이 필요할 때 예기치 않은 동작을 유발할 수 있습니다. 모든 탭이 일관된 네비게이션 구조를 갖도록 HomeViewControllerUINavigationController로 감싸는 것을 고려해 보세요. 만약 특별한 의도가 있다면 주석을 추가하여 다른 개발자들이 이해할 수 있도록 하는 것이 좋겠습니다.

case unknownError
case loginExpired
case missionLimitError
case tooManyRequset

Choose a reason for hiding this comment

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

medium

tooManyRequset에 오타가 있습니다. tooManyRequest로 수정하는 것이 좋겠습니다. 이 오타는 NetworkService.swift와 새로 추가된 NetworkRequestErrorHandler.swift에서도 사용되고 있어, 정의 부분을 수정하면 관련된 모든 코드의 가독성과 유지보수성이 향상될 것입니다.

Suggested change
case tooManyRequset
case tooManyRequest

Comment on lines 36 to 45
titleLabel.snp.makeConstraints {
$0.top.equalToSuperview()
$0.leading.equalToSuperview().inset(20.adjustedW)
$0.height.equalTo(29.adjustedH)
}
seemoreView.snp.makeConstraints {
$0.top.equalTo(titleLabel.snp.bottom).offset(12.adjustedH)
$0.horizontalEdges.equalToSuperview()
$0.height.equalTo(28.adjustedH)
}

Choose a reason for hiding this comment

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

medium

titleLabelseemoreView에 고정된 높이 값을 설정하셨습니다. 이렇게 하면 Dynamic Type과 같은 접근성 기능을 지원하기 어렵고, 텍스트 길이가 달라질 경우 레이아웃이 깨질 수 있습니다. .height 제약 조건을 제거하고, 내부 콘텐츠에 따라 높이가 동적으로 결정되도록 하는 것이 더 유연한 UI를 만드는 데 도움이 됩니다. 이 문제는 PolicyView, SettingNoticeView, SupportView에서도 동일하게 발견되었습니다.

        titleLabel.snp.makeConstraints {
            $0.top.equalToSuperview()
            $0.leading.equalToSuperview().inset(20.adjustedW)
        }
        seemoreView.snp.makeConstraints {
            $0.top.equalTo(titleLabel.snp.bottom).offset(12.adjustedH)
            $0.horizontalEdges.equalToSuperview()
        }

@sonarqubecloud
Copy link

sonarqubecloud bot commented Nov 6, 2025

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@dev-domo dev-domo merged commit bcab6b2 into dev Nov 6, 2025
5 of 6 checks passed
@dev-domo dev-domo deleted the refactor/#79-secondQA branch November 6, 2025 07:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants