-
Notifications
You must be signed in to change notification settings - Fork 1
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 :: [#105] param 리팩토링 #120
Conversation
Walkthrough이 변경 사항은 여러 API의 Changes
Assessment against linked issues
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (9)
Projects/Domain/Sources/Parameter/EarlyLeave/EarlyLeaveApplyRequestParams.swift (1)
15-18
: CodingKeys 구현이 잘 되었습니다!서버와의 통신을 위해
startTime
을"start"
로 매핑하는 방식이 적절합니다. JSON 인코딩 방식으로의 전환이 잘 이루어졌습니다.매핑된 키에 대한 설명을 문서화하면 좋을 것 같습니다:
enum CodingKeys: String, CodingKey { case reason + /// 서버 API 스펙에 맞춰 'startTime'을 'start'로 매핑 case startTime = "start" }
Projects/Domain/Sources/Parameter/Notification/NotificationRequestParams.swift (1)
17-20
: JSON 인코딩 키 매핑이 적절하게 구현되었습니다.CodingKeys 열거형을 통해 Swift의 camelCase 속성명을 API의 snake_case 형식으로 적절하게 매핑했습니다. 이는 일반적인 REST API 네이밍 컨벤션을 따르는 좋은 구현입니다.
다른 API 요청 파라미터들도 이와 같은 방식으로 일관성 있게 구현하는 것이 좋습니다.
Projects/Domain/Sources/Parameter/Bug/BugRequestParams.swift (1)
Line range hint
7-7
: fileName 배열의 Optional 처리 개선이 필요합니다.
fileName
프로퍼티가[String?]
로 선언되어 있지만, 이니셜라이저에서는[String]
을 받고 있습니다. 이는 잠재적인 문제를 일으킬 수 있습니다.다음과 같이 개선하는 것을 제안드립니다:
- public let fileName: [String?] + public let fileName: [String] public init( title: String, content: String, fileName: [String] ) {또는 정말로 Optional 값이 필요하다면:
public init( title: String, content: String, - fileName: [String] + fileName: [String?] ) {Also applies to: 16-16
Projects/Domain/Sources/Parameter/Auth/LoginRequestParams.swift (1)
Line range hint
1-23
: 문서화 추가를 제안드립니다.구조체와 프로퍼티에 대한 문서화 주석을 추가하면 코드의 가독성과 유지보수성이 향상될 것 같습니다.
다음과 같은 문서화를 추가하는 것을 고려해보세요:
import Foundation +/// 로그인 요청에 필요한 파라미터를 정의하는 구조체입니다. public struct LoginRequestParams: Encodable { + /// 사용자 계정 ID public let accountID: String + /// 사용자 비밀번호 public let password: String + /// 디바이스 토큰 public let deviceToken: StringProjects/Domain/Sources/Parameter/ClassRoomMove/ClassRoomMoveRequestParams.swift (1)
21-26
: 매핑 규칙에 대한 문서화가 필요합니다.서버와의 일관된 통신을 위해 매핑 규칙에 대한 문서화를 추가하는 것이 좋겠습니다.
다음과 같이 문서 주석을 추가하는 것을 제안합니다:
+ /// Defines the mapping between Swift property names and JSON keys for server communication. + /// - Properties: + /// - floor: Maintains original key name + /// - classroomName: Maps to "classroom_name" in snake_case + /// - startPeriod: Maps to "start" for simplified key + /// - endPeriod: Maps to "end" for simplified key enum CodingKeys: String, CodingKey {Projects/Domain/Sources/Parameter/Outing/OutingApplyRequestParams.swift (1)
23-28
: 키 매핑에 대한 문서화를 추가하면 좋을 것 같습니다.다른 개발자들이 서버 API와의 매핑을 쉽게 이해할 수 있도록, CodingKeys enum 위에 매핑에 대한 간단한 문서 주석을 추가하는 것을 제안드립니다.
+ /// Defines the mapping between Swift property names and JSON keys for server communication: + /// - startTime -> "start" + /// - endTime -> "end" + /// - applicationType -> "application_type" + /// - reason remains as is enum CodingKeys: String, CodingKey {Projects/Data/Sources/API/EarlyLeaveAPI.swift (1)
42-42
: 매개변수 처리 방식의 개선이 잘 이루어졌습니다! 👍
.requestParameters
에서.requestJSONEncodable
로의 전환은 다음과 같은 이점을 제공합니다:
- 매개변수의 수동 매핑 제거
- Swift의 Codable 프로토콜 활용
- 코드 유지보수성 향상
- 매개변수 매핑 오류 가능성 감소
이러한 접근 방식을 다른 API 엔드포인트에도 일관되게 적용하는 것이 좋습니다.
Projects/Data/Sources/API/BugAPI.swift (1)
55-56
: 매개변수 처리 방식이 개선되었습니다!
.requestParameters
에서.requestJSONEncodable
로의 전환은 다음과 같은 이점이 있습니다:
- 타입 안정성 향상
- 코드 가독성 개선
- 유지보수성 향상
- Swift의 Codable 프로토콜을 활용한 더 나은 구조화
이는 PR의 목표인 매개변수 리팩토링에 잘 부합합니다.
추가 제안: 다른 API 엔드포인트들도 이와 같은 방식으로 일관성 있게 리팩토링하는 것이 좋을 것 같습니다.
Projects/Presentation/Sources/Scene/Home/HomeViewController.swift (1)
258-260
: 공지사항 뷰의 가시성 처리를 개선하면 좋겠습니다.현재 구현은 높이가 0일 때만 뷰를 숨기는 로직을 가지고 있습니다. 다음과 같은 개선을 고려해보세요:
- 데이터 상태에 따른 명시적인 처리
- 로딩 상태 표시
- 에러 상태 처리
다음과 같이 개선할 수 있습니다:
output.noticeViewHeight.asObservable() .withUnretained(self) .bind { owner, height in - if height == 0 { - owner.noticeStackView.isHidden = true - } + // 상태에 따른 UI 처리 + switch height { + case 0: + owner.noticeStackView.isHidden = true + // 필요시 empty state 표시 + case -1: + owner.noticeStackView.isHidden = true + // 에러 상태 표시 + default: + owner.noticeStackView.isHidden = false + } owner.noticeCollectionView.snp.remakeConstraints { $0.height.equalTo(height) } }.disposed(by: disposeBag)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (21)
Projects/Data/Sources/API/AuthAPI.swift
(1 hunks)Projects/Data/Sources/API/BugAPI.swift
(1 hunks)Projects/Data/Sources/API/ClassroomAPI.swift
(1 hunks)Projects/Data/Sources/API/EarlyLeaveAPI.swift
(1 hunks)Projects/Data/Sources/API/NotificationAPI.swift
(1 hunks)Projects/Data/Sources/API/OutingAPI.swift
(1 hunks)Projects/Data/Sources/API/SchoolMealAPI.swift
(1 hunks)Projects/Data/Sources/API/SelfStudyAPI.swift
(1 hunks)Projects/Data/Sources/API/WeekendMealAPI.swift
(1 hunks)Projects/Domain/Sources/Parameter/Auth/LoginRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/Bug/BugRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/ClassRoomMove/ClassRoomMoveRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/EarlyLeave/EarlyLeaveApplyRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/Home/HomeEmpty.swift
(0 hunks)Projects/Domain/Sources/Parameter/Notification/NotificationRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/Outing/OutingApplyRequestParams.swift
(1 hunks)Projects/Domain/Sources/Parameter/Profile/ProfileRequestParams.swift
(0 hunks)Projects/Domain/Sources/Parameter/SchoolMeal/SchoolMealRequestParams.swift
(0 hunks)Projects/Domain/Sources/Parameter/SelfStudy/SelfStudyRequestParams.swift
(0 hunks)Projects/Domain/Sources/Parameter/WeekendMeal/WeekendMealRequestParams.swift
(0 hunks)Projects/Presentation/Sources/Scene/Home/HomeViewController.swift
(2 hunks)
💤 Files with no reviewable changes (5)
- Projects/Domain/Sources/Parameter/Home/HomeEmpty.swift
- Projects/Domain/Sources/Parameter/Profile/ProfileRequestParams.swift
- Projects/Domain/Sources/Parameter/SchoolMeal/SchoolMealRequestParams.swift
- Projects/Domain/Sources/Parameter/SelfStudy/SelfStudyRequestParams.swift
- Projects/Domain/Sources/Parameter/WeekendMeal/WeekendMealRequestParams.swift
✅ Files skipped from review due to trivial changes (3)
- Projects/Data/Sources/API/SchoolMealAPI.swift
- Projects/Data/Sources/API/SelfStudyAPI.swift
- Projects/Data/Sources/API/WeekendMealAPI.swift
🔇 Additional comments (9)
Projects/Domain/Sources/Parameter/Bug/BugRequestParams.swift (1)
19-22
: CodingKeys 구현이 적절합니다!
JSON 인코딩을 위한 CodingKeys 열거형이 잘 구현되었습니다. fileName
을 file_name
으로 매핑한 것은 서버 API의 snake_case 명명 규칙을 따르는 좋은 접근입니다.
Projects/Domain/Sources/Parameter/Auth/LoginRequestParams.swift (1)
18-22
: CodingKeys 구현이 적절합니다!
JSON 키 매핑이 명확하게 정의되어 있으며, API 네이밍 컨벤션을 잘 따르고 있습니다. snake_case를 사용하는 서버 API와 camelCase를 사용하는 Swift 코드 간의 매핑이 올바르게 구현되었습니다.
Projects/Domain/Sources/Parameter/ClassRoomMove/ClassRoomMoveRequestParams.swift (1)
21-26
: CodingKeys 구현이 적절합니다!
서버 통신을 위한 매개변수 인코딩이 올바르게 구현되었습니다. Swift의 camelCase 속성들이 서버의 snake_case 형식으로 잘 매핑되어 있습니다.
Projects/Domain/Sources/Parameter/Outing/OutingApplyRequestParams.swift (1)
23-28
: CodingKeys 구현이 적절합니다!
서버 API와의 일관성을 위해 JSON 키를 적절하게 매핑했습니다. 특히 snake_case를 사용하는 서버 컨벤션과 잘 맞춰져 있습니다.
Projects/Data/Sources/API/OutingAPI.swift (1)
42-42
: 매개변수 처리 방식이 개선되었습니다.
.requestParameters
에서 .requestJSONEncodable
로의 전환은 다음과 같은 이점이 있습니다:
- 타입 안정성 향상
- 컴파일 시점에서의 오류 검출
- 코드 가독성 개선
API 계약과의 일치성을 확인하기 위해 다음 스크립트를 실행하세요:
✅ Verification successful
Let me gather more information about the API contract and the encoding.
매개변수 인코딩이 API 계약과 일치함을 확인했습니다.
OutingApplyRequestParams
구조체의 CodingKeys
가 다음과 같이 적절하게 정의되어 있습니다:
reason
→"reason"
startTime
→"start"
endTime
→"end"
applicationType
→"application_type"
.requestJSONEncodable
로의 전환이 안전하게 이루어졌습니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: OutingApplyRequestParams 구조체의 CodingKeys가 API 계약과 일치하는지 확인
# Test: OutingApplyRequestParams 구조체의 정의와 CodingKeys 검색
rg -A 10 "OutingApplyRequestParams"
Length of output: 4850
Script:
#!/bin/bash
# Check for any custom encoding logic or CodingKeys
rg -A 5 "CodingKeys" Projects/Domain/Sources/Parameter/Outing/OutingApplyRequestParams.swift
# Check the API endpoint and method
rg -A 10 "var path.*case .outingApply" Projects/Data/Sources/API/OutingAPI.swift
rg -A 10 "var method.*case .outingApply" Projects/Data/Sources/API/OutingAPI.swift
Length of output: 439
Projects/Data/Sources/API/ClassroomAPI.swift (1)
42-42
: 매개변수 처리 방식이 개선되었습니다! 👍
.requestParameters
에서 .requestJSONEncodable
로의 전환은 다음과 같은 이점을 제공합니다:
- 타입 안정성 향상
- 런타임 오류 가능성 감소
- 구조화된 데이터를 통한 유지보수성 개선
이는 PR의 목표인 매개변수 리팩토링에 잘 부합합니다.
Projects/Data/Sources/API/AuthAPI.swift (1)
42-42
: 매개변수 처리 방식이 개선되었습니다.
.requestParameters
대신 .requestJSONEncodable(req)
를 사용하도록 변경한 것은 다음과 같은 이점이 있습니다:
- 타입 안정성 향상
- 코드 가독성 개선
- 매개변수 관리의 일관성 확보
LoginRequestParams 구조체의 구현을 확인하기 위해 다음 스크립트를 실행합니다:
✅ Verification successful
매개변수 리팩토링이 적절하게 구현되었습니다.
LoginRequestParams
는 다음과 같이 올바르게 구현되어 있습니다:
Encodable
프로토콜을 준수하여 JSON 인코딩 가능- 필요한 모든 로그인 파라미터(
accountID
,password
,deviceToken
)가 포함 - 적절한 접근 제어자와 초기화 구문 구현
따라서 .requestJSONEncodable(req)
사용은 안전하고 타입 안정성이 보장됩니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# LoginRequestParams 구조체 구현 확인
# LoginRequestParams 정의 검색
rg -t swift "struct LoginRequestParams"
# Codable 준수 여부 확인
ast-grep --pattern 'struct LoginRequestParams: Codable {
$$$
}'
Length of output: 219
Script:
#!/bin/bash
# LoginRequestParams 구조체의 상세 구현 확인
rg -t swift -A 10 "struct LoginRequestParams"
# AuthAPI에서 LoginRequestParams 사용 패턴 확인
rg -t swift -A 5 "LoginRequestParams" "Projects/Data/Sources/API/AuthAPI.swift"
Length of output: 1254
Projects/Data/Sources/API/NotificationAPI.swift (1)
42-42
: 매개변수 처리 방식의 개선이 확인되었습니다.
requestParameters
대신 requestJSONEncodable
을 사용하는 것은 좋은 변경사항입니다. 이는:
- 타입 안정성 향상
- 런타임 오류 가능성 감소
- 코드 유지보수성 개선
등의 이점이 있습니다.
NotificationRequestParams
의 인코딩 구현을 확인하기 위해 다음 스크립트를 실행하세요:
✅ Verification successful
The search results show that NotificationRequestParams
is properly implemented as an Encodable
struct with clear properties (topic
and isSubscribed
). Since no explicit CodingKeys
enum is defined, the default encoding will use the property names as keys, which is sufficient for this case. Let me provide the final response in Korean:
매개변수 인코딩 구현이 적절하게 되어있음을 확인했습니다.
NotificationRequestParams
가 Encodable
프로토콜을 채택하고 있으며, 필요한 모든 속성들이 명확하게 정의되어 있습니다. 기본 인코딩 동작으로 충분하므로 별도의 CodingKeys
구현이 필요하지 않습니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# NotificationRequestParams의 CodingKeys 구현 확인
rg -A 10 "NotificationRequestParams"
Length of output: 4992
Projects/Presentation/Sources/Scene/Home/HomeViewController.swift (1)
39-45
: 레이아웃 마진 설정이 적절합니다.
스택뷰의 레이아웃 마진이 잘 설정되어 있습니다. 하단 여백 16은 콘텐츠 간의 적절한 간격을 제공합니다.
개요
작업사항
UI
close #105
Summary by CodeRabbit
새로운 기능
버그 수정
문서화
CodingKeys
열거형이 추가되어 JSON 인코딩 호환성이 향상되었습니다.