Skip to content

[FIX] 주문 요청 시 AgencyId 파라미터 추가#32

Merged
Sangyoon98 merged 4 commits intomainfrom
dev
Nov 10, 2025
Merged

[FIX] 주문 요청 시 AgencyId 파라미터 추가#32
Sangyoon98 merged 4 commits intomainfrom
dev

Conversation

@Sangyoon98
Copy link
Copy Markdown
Member

@Sangyoon98 Sangyoon98 commented Nov 10, 2025

📝 Summary

[FIX] 주문 요청 시 AgencyId 파라미터 추가

🙏 Question & PR point

📬 Reference

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 주문 생성 시 대행사 정보(agencyId)가 포함됩니다.
  • 개선사항

    • 앱 버전이 1.0.5로 업데이트되었습니다.
    • 인증·사용자 흐름에서 "workspace"가 "role"로 대체되어 가입/로그인 및 사용자·직원 관련 API/화면이 역할(role) 기반으로 동작합니다.
    • 사용자·직원 데이터에서 workspace 필드가 제거되고, 사용자 역할(role)은 문자열로 저장됩니다.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Nov 10, 2025

Warning

Rate limit exceeded

@Sangyoon98 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 18 minutes and 38 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 9396989 and 7e091eb.

📒 Files selected for processing (1)
  • SampoomManagement.xcodeproj/project.pbxproj (4 hunks)

Walkthrough

프로젝트 메타데이터(버전) 업데이트, 인증/사용자 모델에서 workspace 제거 및 role로 대체, User/Employee DTO·매퍼·리포지토리·유스케이스·뷰모델 전반의 파라미터·필드 변경, 주문 요청 DTO에 agencyId 추가와 관련 리포지토리 반영, TokenRefresh 및 인증 저장소에서 workspace 제거 등이 포함된 API/모델/저장소 인터페이스 변경 집합입니다.

Changes

응집도 / 파일(들) 변경 요약
프로젝트 설정
SampoomManagement.xcodeproj/project.pbxproj
Debug/Release 빌드 설정의 CURRENT_PROJECT_VERSION 4→6, MARKETING_VERSION 1.0.3→1.0.5 업데이트
주문(DTO / 리포지토리)
SampoomManagement/Features/Order/Data/Remote/DTO/OrderRequestDto.swift, SampoomManagement/Features/Order/Data/Repository/OrderRepositoryImpl.swift
OrderRequestDtoagencyId: Int 속성 추가 및 createOrder에서 agencyId: user.agencyId 포함하도록 수정
인증 API / DTO / 리포지토리 / Preferences
SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift, .../SignupRequestDTO.swift, .../API/AuthAPI.swift, .../Repository/AuthRepositoryImpl.swift, .../Local/Preferences/AuthPreferences.swift, .../Mappers/AuthMappers.swift, .../Domain/Repository/AuthRepository.swift, .../Domain/UseCase/SignUpUseCase.swift, .../UI/SignUpViewModel.swift, .../UI/LoginViewModel.swift
인증 요청/응답과 서명/로그인/회원가입 흐름에서 workspacerole로 필드명/파라미터 전환. AuthPreferences에서 workspace 키 제거 및 User.role을 enum→String으로 변경. 관련 호출부와 시리얼라이즈/역직렬화 사용부 업데이트
사용자(User) 도메인 / DTO / API / 리포지토리 / 유스케이스 / 뷰모델
SampoomManagement/Features/User/... (다수: Domain/Models/User.swift, Domain/Models/Employee.swift, Data/Remote/DTO/*, Data/Remote/API/UserAPI.swift, Data/Repository/UserRepositoryImpl.swift, Domain/Repository/UserRepository.swift, Domain/UseCase/*, UI/*, Data/Mappers/UserMappers.swift)
전체적으로 workspace 필드 제거 및 API/리포지토리/유스케이스/뷰모델 파라미터명 workspacerole로 변경. User.role 타입을 enum에서 String으로 변경하고 UserRole enum 제거. 여러 DTO/매퍼에서 workspace 매핑 삭제 또는 role 필드로 대체
토큰 갱신 관련
SampoomManagement/Core/Network/TokenRefreshService.swift
갱신된 User 객체 생성 시 workspace 전달 제거 (workspace 필드 미포함 User 생성)
계산기 샘플 변경
src/calculator.py
Calculatorcoderabbit_add(x, y) 메서드 추가, coderabbit_formula(x, y)coderabbit_formula(x, y, z) 시그니처 변경, 전역변수 old_global_varnew_global_var로 이름 변경

Sequence Diagram(s)

sequenceDiagram
  participant UI as UI (Login/Signup)
  participant VM as ViewModel
  participant AuthUC as Auth UseCase / Repo
  participant API as Auth API (원격)
  participant Store as AuthPreferences

  rect rgba(180,220,255,0.25)
    UI->>VM: 로그인/회원가입 입력 (role)
    VM->>AuthUC: execute(..., role: String)
    AuthUC->>AuthUC: build RequestDTO(role: role)
    AuthUC->>API: call login/signup with role
    API-->>AuthUC: response DTO
    AuthUC->>Store: saveUser(user with role:String)
    AuthUC-->>VM: User
    VM-->>UI: 상태 업데이트
  end
Loading
sequenceDiagram
  participant VM as Any ViewModel
  participant UserUC as User UseCase
  participant Repo as UserRepositoryImpl
  participant API as User API

  VM->>UserUC: getProfile(role: String)
  UserUC->>Repo: getProfile(role: String)
  Repo->>API: GET /user/profile?role=<role>
  API-->>Repo: GetProfileResponseDTO (workspace removed)
  Repo->>VM: User (role:String, no workspace)
Loading

(변경 요약: 모든 관련 호출은 query/body에 workspace 대신 role을 전달하며, DTO/모델에서 workspace 필드가 제거되어 직렬화 형식이 달라집니다.)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • 주의할 파일/영역:
    • AuthPreferences: 키체인 저장/복구 로직에서 role 타입 변경(문자열<->enum)과 workspace 삭제 영향
    • User 모델·DTO·매퍼 일관성: role 타입(문자열)과 workspace 제거 후 매핑/디코딩 오류 검사
    • API 엔드포인트 쿼리 파라미터 변경(backend 호환성 확인 필요)
    • OrderRequestDto/OrderRepositoryImpl: agencyId 값 존재성(널/디폴트) 검증
    • TokenRefreshService: User 재구성 시 누락 필드로 인한 부작용 검사

Possibly related PRs

Suggested labels

ready-to-merge

Suggested reviewers

  • Lee-Jong-Jin
  • taemin3
  • CHOOSLA
  • yangjiseonn

Poem

🐰 깡충깡충 코드를 뛰어넘어,
role로 이름 바꾸고 workspace는 안녕,
agencyId 새로 달아 주문도 환영,
버전은 1.0.5로 폴짝! 🎉
당근 한 조각의 축하를 보냅니다.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.64% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 주문 요청 시 AgencyId 파라미터 추가에 관한 것으로, 변경 사항 중 OrderRequestDto에 agencyId 속성이 추가되고 OrderRepositoryImpl에서 이를 사용하는 부분과 일치합니다.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@vivivim vivivim left a comment

Choose a reason for hiding this comment

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

goooood

Copy link
Copy Markdown
Contributor

@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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
SampoomManagement/Features/User/Data/Mappers/UserMappers.swift (1)

29-46: 빈 문자열 할당을 재검토해 주세요.

Line 35에서 role이 빈 문자열("")로 할당되고 있습니다. 프로필 업데이트 응답에서 role 정보가 반환되지 않는 경우라도, 빈 문자열 대신 기존 사용자의 role을 유지하거나 DTO에서 실제 반환되는 값을 매핑하는 것이 더 적절할 수 있습니다.

DTO 응답 구조를 확인하고, role 필드가 실제로 반환되지 않는 경우 기존 사용자 정보를 병합하는 로직을 고려해 주세요.

🧹 Nitpick comments (5)
SampoomManagement/Features/User/UI/EmployeeListViewModel.swift (1)

90-95: 하드코딩된 role 값을 상수로 추출 권장

role: "AGENCY" 값이 하드코딩되어 있습니다. 이 값이 코드베이스 전반에서 사용되는 경우 중앙 상수 또는 열거형으로 정의하는 것이 유지보수성을 향상시킵니다.

예시:

// Constants.swift 또는 적절한 위치에 추가
enum UserRole {
    static let agency = "AGENCY"
    static let vendor = "VENDOR"
    // 기타 역할들...
}

// 사용
let result = try await getEmployeeUseCase.execute(
    role: UserRole.agency,
    organizationId: user.agencyId,
    page: page,
    size: 20
)
SampoomManagement/Features/Auth/UI/SignUpViewModel.swift (1)

103-103: 하드코딩된 문자열을 상수로 관리하는 것을 권장합니다.

"AGENCY" 문자열이 하드코딩되어 있습니다. 동일한 값이 여러 곳에서 사용될 경우 상수나 열거형으로 관리하면 유지보수성이 향상됩니다.

예시:

// Constants.swift
enum UserRole {
    static let agency = "AGENCY"
    static let admin = "ADMIN"
}

// 사용
_ = try await getProfileUseCase.execute(role: UserRole.agency)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)

72-72: 파라미터 변경 확인 완료 및 하드코딩된 문자열 개선 권장.

workspace 파라미터가 role로 올바르게 변경되었습니다. 다만, "AGENCY" 문자열이 하드코딩되어 있어 SignUpViewModel과 동일한 개선이 필요합니다.

여러 파일에서 동일한 "AGENCY" 문자열이 반복 사용되고 있으므로, 공통 상수로 정의하여 관리하는 것을 권장합니다.

// Constants/UserRole.swift
enum UserRole {
    static let agency = "AGENCY"
    static let admin = "ADMIN"
}

// 사용
let result = try await editEmployeeUseCase.execute(employee: updatedEmployee, role: UserRole.agency)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)

105-131: editEmployee 메서드가 올바르게 업데이트되었으나, 타입 안정성 개선을 고려하세요.

role 파라미터 전달과 직원 정보 병합 로직이 정상적으로 작동합니다.

Line 118의 방어 로직(updatedEmployee.role.isEmpty ? employee.role : updatedEmployee.role)은 API 응답에서 role이 비어있을 수 있음을 시사합니다. 다음 개선사항을 고려해주세요:

  1. 타입 안정성 강화: role을 String 대신 enum으로 정의하여 잘못된 값 전달을 방지
  2. API 응답 검증: role이 비어있는 경우에 대한 명시적 에러 처리 또는 로깅

예시:

enum UserRole: String, Codable {
    case agency = "AGENCY"
    case admin = "ADMIN"
    // 기타 역할 추가
}
SampoomManagement/Features/User/Domain/Repository/UserRepository.swift (1)

12-17: 프로토콜 메서드 시그니처가 일관되게 업데이트되었습니다.

모든 메서드에서 workspace 파라미터가 role 파라미터로 올바르게 변경되었으며, 구현체(UserRepositoryImpl)와 일치합니다.

향후 유지보수성과 타입 안정성을 위해 다음 개선사항을 고려하세요:

  1. Enum 사용: role을 String 대신 강타입 enum으로 정의
  2. 기본값 제공: getProfile 메서드에 기본 role 값 제공을 고려

예시:

enum UserRole: String {
    case agency = "AGENCY"
    case admin = "ADMIN"
}

protocol UserRepository {
    func getProfile(role: UserRole = .agency) async throws -> User
    func getEmployeeList(role: UserRole, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool)
    // ...
}

이렇게 하면 컴파일 타임에 잘못된 role 값 전달을 방지할 수 있습니다.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5f78b3f and 9396989.

📒 Files selected for processing (32)
  • SampoomManagement/Core/Network/TokenRefreshService.swift (0 hunks)
  • SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift (2 hunks)
  • SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift (1 hunks)
  • SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift (3 hunks)
  • SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift (1 hunks)
  • SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift (1 hunks)
  • SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift (2 hunks)
  • SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift (1 hunks)
  • SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1 hunks)
  • SampoomManagement/Features/Auth/UI/LoginViewModel.swift (1 hunks)
  • SampoomManagement/Features/Auth/UI/SignUpUiState.swift (5 hunks)
  • SampoomManagement/Features/Auth/UI/SignUpViewModel.swift (2 hunks)
  • SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift (1 hunks)
  • SampoomManagement/Features/User/Data/Mappers/UserMappers.swift (4 hunks)
  • SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (2 hunks)
  • SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift (1 hunks)
  • SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift (0 hunks)
  • SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift (0 hunks)
  • SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift (1 hunks)
  • SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (6 hunks)
  • SampoomManagement/Features/User/Domain/Models/Employee.swift (0 hunks)
  • SampoomManagement/Features/User/Domain/Models/User.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/Repository/UserRepository.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1 hunks)
  • SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift (1 hunks)
  • SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1 hunks)
  • SampoomManagement/Features/User/UI/EmployeeListViewModel.swift (1 hunks)
  • SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1 hunks)
  • SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift (0 hunks)
💤 Files with no reviewable changes (5)
  • SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift
  • SampoomManagement/Core/Network/TokenRefreshService.swift
  • SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift
  • SampoomManagement/Features/User/Domain/Models/Employee.swift
  • SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift
🧰 Additional context used
🧬 Code graph analysis (15)
SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift (8)
SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1)
  • execute (17-33)
SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (1)
  • updateEmployeeStatus (71-84)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)
  • updateEmployeeStatus (133-146)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1)
  • updateEmployeeStatus (53-96)
SampoomManagement/Features/Auth/UI/LoginViewModel.swift (1)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (3)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (4)
  • getProfile (23-58)
  • getEmployeeList (95-103)
  • editEmployee (105-131)
  • updateEmployeeStatus (133-146)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)
  • editEmployee (46-89)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1)
  • updateEmployeeStatus (53-96)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (2)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (1)
  • getProfile (19-26)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)
  • getProfile (23-58)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (6)
SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1)
  • execute (17-33)
SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)
  • getEmployeeCount (148-154)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift (4)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (1)
  • getEmployeeList (45-52)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)
  • getEmployeeList (95-103)
SampoomManagement/Features/Auth/UI/SignUpViewModel.swift (2)
SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1)
  • execute (17-33)
SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (2)
SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/Repository/UserRepository.swift (4)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (5)
  • getProfile (19-26)
  • updateProfile (29-42)
  • getEmployeeList (45-52)
  • editEmployee (55-68)
  • updateEmployeeStatus (71-84)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (6)
  • getProfile (23-58)
  • updateProfile (60-93)
  • getEmployeeList (95-103)
  • editEmployee (105-131)
  • updateEmployeeStatus (133-146)
  • getEmployeeCount (148-154)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)
  • editEmployee (46-89)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1)
  • updateEmployeeStatus (53-96)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)
SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (3)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (1)
  • editEmployee (55-68)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (1)
  • editEmployee (105-131)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)
  • editEmployee (46-89)
SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift (1)
SampoomManagement/Features/Auth/Data/Local/Preferences/KeychainManager.swift (1)
  • save (24-43)
SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift (2)
SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/User/Domain/UseCase/GetStoredUserUseCase.swift (1)
  • execute (17-19)
SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1)
SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift (1)
  • signUp (20-50)
SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (4)
SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (4)
  • getProfile (19-26)
  • getEmployeeList (45-52)
  • editEmployee (55-68)
  • updateEmployeeStatus (71-84)
SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift (1)
  • retry (152-173)
SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift (1)
  • editEmployee (46-89)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1)
  • updateEmployeeStatus (53-96)
🔇 Additional comments (37)
SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift (1)

62-76: 변경 사항이 올바릅니다.

Employee 객체 생성에서 workspace 필드가 제거되고 기존 필드들이 올바르게 유지되고 있습니다. 리팩토링 방향과 일치합니다.

SampoomManagement/Features/Auth/UI/SignUpUiState.swift (1)

12-12: 일관된 리팩토링 확인

workspace에서 role로의 전환이 프로퍼티, 이니셜라이저, copy() 메서드 전반에 걸쳐 일관되게 적용되었습니다. 기본값 "AGENCY"는 다른 파일들과 일관성을 유지하고 있으나, 향후 중앙 상수로 추출하는 것을 고려해 주세요.

Also applies to: 38-38, 58-58, 95-95, 116-116

SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift (2)

20-35: signUp 메서드 시그니처 업데이트 확인

workspace 파라미터가 role로 정확하게 변경되었으며, API 호출에도 올바르게 전달되고 있습니다.


98-111: 토큰 갱신 시 사용자 정보 보존 확인

refreshToken 메서드에서 User 생성 시 workspace 필드가 제거되고 role 필드를 올바르게 사용하고 있습니다. 기존 사용자 정보가 적절하게 보존됩니다.

SampoomManagement/Features/Auth/UI/LoginViewModel.swift (1)

52-54: GetProfileUseCase 호출 업데이트 확인

workspace에서 role로의 파라미터 라벨 변경이 GetProfileUseCase.execute(role:) 시그니처와 올바르게 일치합니다. 하드코딩된 "AGENCY" 값은 프로젝트 전반의 패턴과 일관성을 유지하고 있습니다.

SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift (1)

132-137: role 기반 로직 전환 및 폴백 처리 확인

workspace 기반에서 role 기반으로의 전환이 올바르게 구현되었습니다. 빈 role 값에 대한 폴백 로직(storedUser.role.isEmpty ? "AGENCY" : storedUser.role)이 적절히 구현되어 있어 AuthMappers에서 발생할 수 있는 빈 role 문제를 완화합니다.

SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift (1)

10-15: DTO 필드 리네이밍 일관성 확인

workspace에서 role로의 필드 변경이 프로젝트 전반의 DTO 리팩토링과 일관되게 적용되었습니다. 백엔드 API 응답이 동일하게 role 필드를 반환하는지 확인해 주세요.

SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift (1)

10-14: 클라이언트 코드 일관성 확인 완료 - 백엔드 계약 검증 필요

스크립트 결과에 따르면 클라이언트 코드는 일관성 있게 업데이트되었습니다. AuthAPI.swift 라인 20에서 LoginRequestDTO(role: "AGENCY", email: email, password: password)로 올바르게 사용 중이며, 로그인 흐름에서 workspace 필드에 대한 상충하는 참조는 발견되지 않았습니다.

다만 백엔드 API가 role 필드를 예상하도록 업데이트되었는지는 코드베이스에서 직접 확인할 수 없습니다. 백엔드 API 스키마 또는 문서를 통해 다음을 확인해 주세요:

  • 로그인 엔드포인트가 role 필드를 기대하는지
  • workspace 필드 지원이 중단되었는지
SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift (1)

11-26: 검증 완료: 빈 role 처리가 적절히 구현되어 있음

LoginResponseDTO는 설계상 role 정보를 포함하지 않으며, 로그인 직후 getProfileUseCase.execute(role: "AGENCY")를 통해 프로필을 조회합니다. 프로필 조회가 실패하면 사용자에게 에러 메시지가 표시되고, 성공 시 role이 업데이트됩니다. 또한 DashboardViewModelrole.isEmpty ? "AGENCY" : storedUser.role 패턴과 UserMappers, UserRepositoryImpl의 폴백 처리로 중간 상태에서 빈 role로 인한 문제가 방지됩니다.

SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift (1)

17-18: 변경 사항 확인 완료.

파라미터명이 workspace에서 role로 일관되게 변경되었으며, 리포지토리 호출도 올바르게 업데이트되었습니다.

SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift (1)

12-12: DTO 필드 변경 확인 완료.

workspace 필드가 role로 변경되어 API 계약과 일치합니다.

SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift (1)

13-13: 응답 DTO 변경 확인 완료.

workspace 필드가 role로 변경되어 서버 응답 스키마와 일치합니다.

SampoomManagement/Features/Auth/UI/SignUpViewModel.swift (1)

85-96: 변수 및 파라미터 변경 확인 완료.

workspace 변수와 파라미터가 role로 일관되게 변경되었습니다.

SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift (1)

17-18: 유스케이스 변경 확인 완료.

파라미터가 workspace에서 role로 변경되었으며, 리포지토리 호출이 올바르게 업데이트되었습니다.

SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift (1)

13-13: 프로토콜 시그니처 변경 확인 완료.

signUp 메서드의 파라미터가 workspace에서 role로 변경되었습니다.

SampoomManagement/Features/User/Domain/Models/User.swift (1)

14-14: 서버 API와의 호환성을 고려한 현재 구현 방식 확인 필요

검증 결과, UserRole 열거형은 현재 코드베이스에 존재하지 않으며, role은 처음부터 String 타입으로 설계되었습니다. 서버 API가 쿼리 파라미터로 문자열 기반 역할을 요구하기 때문에 이러한 설계가 필요한 상태입니다.

다만 타입 안전성 개선을 위해 다음을 고려해주세요:

  • "AGENCY" 등 허용 가능한 role 값들을 상수로 정의하거나 enum RoleValue 같은 구조로 관리
  • 현재 DashboardViewModel에서 사용 중인 fallback 로직처럼 역할 값 검증을 시스템 전역에서 일관되게 처리
  • 서버 API 문서에 허용 가능한 역할 값 범위를 명시
SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift (1)

17-33: 파라미터 이름 변경이 올바르게 적용되었습니다.

workspace에서 role로의 파라미터 이름 변경이 일관되게 적용되었으며, 리포지토리 호출도 올바르게 업데이트되었습니다.

SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift (1)

17-19: 파라미터 이름 변경이 올바르게 적용되었습니다.

workspace에서 role로의 변경이 일관되게 적용되었습니다.

SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift (2)

19-34: 하드코딩된 role 값을 확인해 주세요.

로그인 시 role"AGENCY"로 하드코딩되어 있습니다. 만약 향후 다른 역할(예: ADMIN, USER 등)의 사용자가 로그인해야 하는 경우 이 구현이 제한적일 수 있습니다.

의도적으로 AGENCY 역할만 로그인하도록 제한하는 것인지 확인해 주시고, 향후 확장성을 고려하여 role을 파라미터로 받도록 변경하는 것을 검토해 주세요.


37-69: 회원가입 API 변경이 올바르게 적용되었습니다.

workspace에서 role로의 파라미터 변경이 일관되게 적용되었으며, DTO 구성과 API 요청 파라미터가 올바르게 업데이트되었습니다.

SampoomManagement/Features/User/Data/Mappers/UserMappers.swift (4)

10-27: 프로필 조회 매핑이 올바르게 적용되었습니다.

workspace 필드가 제거되고 role이 문자열로 직접 할당되는 것으로 올바르게 변경되었습니다.


48-66: 직원 수정 매핑이 올바르게 적용되었습니다.

workspace 필드가 제거되고 role이 응답 DTO에서 직접 매핑되도록 올바르게 변경되었습니다.


68-86: 직원 DTO 매핑이 올바르게 적용되었습니다.

workspace 필드가 제거되고 role 필드가 유지되었습니다.


88-106: 상태 업데이트 매핑의 폴백 로직이 적절합니다.

Line 94에서 응답에 role이 비어있을 경우 기존 직원의 role을 유지하는 폴백 로직이 잘 구현되어 있습니다.

SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift (1)

17-19: 파라미터 이름 변경이 올바르게 적용되었습니다.

workspace에서 role로의 변경이 일관되게 적용되었습니다.

SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift (1)

17-19: 파라미터 이름 변경이 올바르게 적용되었습니다.

workspace에서 role로의 변경이 일관되게 적용되었습니다.

SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift (3)

28-58: 사용자 저장 로직이 올바르게 업데이트되었습니다.

workspace 관련 저장 로직이 제거되고 role이 문자열로 직접 저장되도록 올바르게 변경되었습니다. 롤백 로직도 일관되게 업데이트되었습니다.


72-111: 사용자 조회 로직이 올바르게 업데이트되었습니다.

workspace 필드 조회가 제거되고 role을 문자열로 직접 사용하도록 변경되었습니다. 마이그레이션 대응을 위한 안전한 기본값 처리도 적절합니다.


140-158: 키체인 정리 로직이 올바르게 업데이트되었습니다.

workspace 키 삭제 로직이 제거되어 변경사항과 일관성을 유지합니다.

SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift (4)

18-26: 기본값으로 하드코딩된 role을 확인해 주세요.

getProfile 메서드의 role 파라미터가 기본값 "AGENCY"로 하드코딩되어 있습니다. 다른 역할의 사용자 프로필을 조회해야 하는 경우를 고려하여, 이 기본값이 적절한지 확인해 주세요.

호출하는 측에서 명시적으로 role을 전달하도록 하거나, 기본값 제거를 검토해 주세요.


44-52: 직원 목록 조회 API 변경이 올바르게 적용되었습니다.

workspace에서 role로의 파라미터 변경이 엔드포인트 쿼리 스트링에 올바르게 반영되었습니다.


54-68: 직원 수정 API 변경이 올바르게 적용되었습니다.

workspace에서 role로의 파라미터 변경이 엔드포인트 쿼리 스트링에 올바르게 반영되었습니다.


70-84: 직원 상태 수정 API 변경이 올바르게 적용되었습니다.

workspace에서 role로의 파라미터 변경이 엔드포인트 쿼리 스트링에 올바르게 반영되었습니다.

SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift (4)

95-103: getEmployeeList 메서드가 올바르게 업데이트되었습니다.

role 파라미터가 API 호출에 정확히 전달되고 있으며, 에러 처리와 반환 로직도 적절합니다.


133-146: updateEmployeeStatus 메서드가 올바르게 업데이트되었습니다.

role 파라미터가 API에 정확히 전달되고 있으며, 에러 처리도 적절합니다.


148-154: getEmployeeCount 메서드가 올바르게 업데이트되었습니다.

role 파라미터를 사용하여 직원 수를 조회하는 로직이 정상적으로 작동합니다.


23-26: role: "AGENCY" 하드코딩이 6개 위치에서 확인됨 - 동적 role 관리 검토 필요

파라미터 변경(workspace → role)은 올바르게 적용되었으나, 다음 위치들에서 "AGENCY" 값이 하드코딩되어 있습니다:

  • UpdateEmployeeStatusViewModel.swift:79 (updateEmployeeStatusUseCase 호출)
  • EditEmployeeViewModel.swift:72 (editEmployeeUseCase 호출)
  • SignUpViewModel.swift:103 (getProfileUseCase 호출)
  • LoginViewModel.swift:53 (getProfileUseCase 호출)
  • AuthAPI.swift:20 (LoginRequestDTO 생성)
  • EmployeeListViewModel.swift:91 (getEmployeeUseCase 호출)

앱의 비즈니스 로직에 따라 이것이 의도된 동작인지, 아니면 런타임에 동적으로 role을 결정해야 하는지 검토하여 일관된 role 관리 전략을 확인해주세요.

@Sangyoon98 Sangyoon98 merged commit 2e3e68a into main Nov 10, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants