Conversation
Walkthrough이 PR은 프로젝트 전반에서 Changes
Sequence Diagram(s)sequenceDiagram
participant UI as UI / ViewModel
participant Repo as Repository
participant Pref as AuthPreferences
participant Crypto as CryptoManager
participant Store as DataStore
rect rgb(240,248,255)
UI->>Repo: saveUser(user)
Repo->>Pref: saveUser(user)
Pref->>Crypto: encrypt(user fields incl. workspace)
Crypto-->>Pref: encrypted fields
Pref->>Store: write encrypted prefs (token, id, workspace...)
end
rect rgb(255,250,240)
UI->>Repo: getStoredUser()
Repo->>Pref: getStoredUser()
Pref->>Store: read encrypted prefs
Store-->>Pref: encrypted values
Pref->>Crypto: decrypt(values incl. workspace)
Crypto-->>Pref: decrypted fields
Pref-->>Repo: User(...)
Repo-->>UI: User
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 특히 검토가 필요한 부분:
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
app/src/main/java/com/sampoom/android/feature/auth/domain/repository/AuthRepository.kt (1)
7-14: PR 제목과 실제 변경사항의 불일치를 확인하세요.PR 제목은 "[REVERT] Workspace, Role 통합 롤백"으로 되어 있지만, 실제 변경사항은
role을workspace로 변경하는 것입니다. 진짜 롤백이라면workspace를 제거하고role을 유지해야 하는데, 현재 변경사항은 그 반대입니다.전체 PR의 8개 파일 모두
workspace를 도입하거나role을workspace로 이름 변경하고 있습니다. PR의 의도를 명확히 확인하고, 제목과 구현이 일치하도록 수정해주세요.app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt (1)
51-69: 하드코딩된 workspace 값을 제거하세요.Line 58에서
workspace = "AGENCY"로 하드코딩되어 있습니다. 이는 심각한 문제입니다:
- 회원가입 시 사용자가 입력한
workspace값이 무시됩니다signUp→signIn흐름에서 불일치가 발생합니다- 모든 사용자가 "AGENCY" workspace로 강제 로그인됩니다
해결 방법을 선택하세요:
signIn메서드에workspace파라미터를 추가하여signUp에서 전달받은 값을 사용- 저장된 사용자 정보에서 workspace를 조회하여 사용
- 백엔드에서 이메일/비밀번호만으로 workspace를 자동 판별하는 경우, 주석으로 명확히 설명
현재 구조라면 방법 1을 추천합니다:
- override suspend fun signIn( - email: String, - password: String - ): Result<User> { + override suspend fun signIn( + email: String, + password: String, + workspace: String = "AGENCY" + ): Result<User> { return runCatching { val loginDto = api.login( LoginRequestDto( - workspace = "AGENCY", + workspace = workspace, email = email, password = password )그리고 Line 45에서 호출 시:
retry(times = 5, initialDelay = 500) { - signIn(email, password).getOrThrow() + signIn(email, password, workspace).getOrThrow() }app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt (1)
9-14: 중복된 필드:role과workspace가 동시에 존재합니다.
User모델에role(Line 9)과workspace(Line 14) 필드가 모두 존재합니다.Employee모델과 동일한 문제입니다:
- 어느 필드를 사용해야 할지 불명확
- 데이터 불일치 위험
- 코드베이스 전체에서 혼란 야기
role과workspace가 정말 다른 개념이라면(예: role은 권한, workspace는 작업 공간), 명확한 네이밍과 문서화가 필요합니다. 같은 개념이라면 하나만 남겨야 합니다.app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt (1)
35-49: 빈 문자열로 초기화된workspace
UpdateProfileResponseDto.toModel()에서workspace = ""로 설정되어 있습니다. 프로필 업데이트 응답에서 workspace 정보를 받지 못하는 경우, 기존 사용자의 workspace 값을 유지하거나 명시적인 기본값을 사용하는 것이 더 안전합니다.
🧹 Nitpick comments (3)
app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt (2)
51-65:role필드에 빈 문자열 할당
EditEmployeeResponseDto.toModel()에서role = ""로 설정하면서 동시에workspace를 DTO에서 가져옵니다 (line 56). 이는 다음을 시사합니다:
Employee도메인 모델에 여전히role필드가 존재role이 더 이상 사용되지 않지만 제거되지 않은 상태
role필드가 더 이상 필요하지 않다면, 도메인 모델에서 완전히 제거하는 것을 고려하세요. 사용되지 않는 필드를 빈 문자열로 유지하면 혼란과 기술 부채가 발생합니다.
67-81: 일관성 없는 필드 처리
UpdateEmployeeStatusResponseDto.toModel()에서도 동일한 패턴이 반복됩니다 -role = ""로 설정하면서workspace는 실제 값을 사용합니다.마이그레이션이 완료되었다면
role필드를 도메인 모델에서 제거하는 것이 좋습니다. 그렇지 않으면 어떤 필드를 사용해야 하는지 불명확합니다.app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt (1)
90-92: 유효성 검사 조건 가독성 개선 제안Line 91의 조건문이 매우 길어 가독성이 떨어집니다. 여러 줄로 나누거나 중간 변수를 사용하는 것을 고려해보세요.
다음과 같이 리팩토링할 수 있습니다:
- if (userId != null && userName != null && userEmail != null && userRole != null && - accessToken != null && refreshToken != null && userPosition != null && userWorkspace != null && userBranch != null && userAgencyId != null && userStartedAt != null && userEndedAt != null - ) { + val requiredFieldsPresent = listOf( + userId, userName, userEmail, userRole, accessToken, refreshToken, + userPosition, userWorkspace, userBranch, userAgencyId, userStartedAt, userEndedAt + ).all { it != null } + + if (requiredFieldsPresent) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (23)
app/build.gradle.kts(1 hunks)app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt(4 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/mapper/AuthMappers.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/LoginRequestDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/SignUpRequestDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt(3 hunks)app/src/main/java/com/sampoom/android/feature/auth/domain/repository/AuthRepository.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/SignUpUseCase.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpUiState.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpViewModel.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt(5 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/api/UserApi.kt(3 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EditEmployeeResponseDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EmployeeDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/GetProfileResponseDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateEmployeeStatusResponseDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt(8 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/model/Employee.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/repository/UserRepository.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/usecase/EditEmployeeUseCase.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetProfileUseCase.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateEmployeeStatusUseCase.kt(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt (1)
app/src/main/java/com/sampoom/android/core/util/DelayNetwork.kt (1)
retry(7-30)
🔇 Additional comments (21)
app/build.gradle.kts (1)
35-36: 버전 범프가 일관되게 적용되었습니다.versionCode를 7에서 8로, versionName을 "1.0.6"에서 "1.0.7"로 업데이트하는 변경사항이 일관되고 적절합니다. 의미론적 버전 관리 관례를 따르고 있으며, 패치 버전 증가가 이 정도 규모의 변경사항에 타당합니다.
다만 PR 제목의 "[REVERT]"와 AI 요약의 "role → workspace 변환"이 상충하는 것으로 보이므로, 이 PR이 실제로 workspace 통합 기능을 추가하는 것인지 아니면 이전 상태로 되돌리는 것인지 확인하시기 바랍니다. 버전 번호는 두 시나리오 모두에 적절합니다.
app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/LoginRequestDto.kt (1)
3-7: DTO 구조 변경이 올바르게 적용되었습니다.
role에서workspace로의 필드 이름 변경이 올바르게 적용되었습니다. 다만 백엔드 API 스펙과 일치하는지 확인이 필요합니다.app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/SignUpRequestDto.kt (1)
3-10: 회원가입 DTO 변경이 올바릅니다.
role에서workspace로의 필드 변경이 올바르게 적용되었습니다. 백엔드 API 계약과 일치하는지 확인하세요.app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateEmployeeStatusResponseDto.kt (1)
3-8: DTO 변경이 올바르게 적용되었습니다.
role에서workspace로의 필드 이름 변경이 일관되게 적용되었습니다.app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt (1)
22-48: 회원가입 로직은 올바르게 구현되었습니다.
workspace파라미터를 받아서SignUpRequestDto에 전달하고, 가입 후 로그인을 시도하는 흐름이 올바릅니다.app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/GetProfileResponseDto.kt (1)
7-9: 리뷰 코멘트가 부정확합니다.GetProfileResponseDto의
role과workspace는 중복 필드가 아니라 서로 다른 필드입니다:
- Line 7:
val role: String- Line 9:
val workspace: StringUserMappers.kt의
toModel()함수에서도 두 필드 모두 명확하게 User 모델로 매핑되고 있습니다:
role = roleworkspace = workspace백엔드 API가 두 필드를 모두 반환하고 있으며, 매퍼에서도 각 필드를 적절히 처리하고 있습니다.
Likely an incorrect or invalid review comment.
app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpViewModel.kt (1)
157-164: 변경 사항 확인 완료
workspace파라미터 사용으로의 전환이 올바르게 적용되었습니다.SignUpUseCase호출이SignUpUiState의 변경사항과 일치합니다.app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpUiState.kt (1)
8-8: 필드 이름 변경 확인
role에서workspace로의 필드 이름 변경이 올바르게 적용되었습니다. 기본값 "AGENCY"가 유지되어 기존 동작과 일관성이 있습니다.app/src/main/java/com/sampoom/android/feature/user/domain/usecase/EditEmployeeUseCase.kt (1)
10-10: 파라미터 이름 변경 적용 완료
role에서workspace로의 파라미터 이름 변경이 repository 호출과 함께 일관되게 적용되었습니다.app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetProfileUseCase.kt (1)
10-10: UseCase 시그니처 업데이트 확인
workspace파라미터로의 변경이 repository 레이어와 일관되게 적용되었습니다.app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/SignUpUseCase.kt (1)
10-24: SignUp 플로우 업데이트 확인
role에서workspace로의 파라미터 변경이 메서드 시그니처와 repository 호출 모두에 일관되게 적용되었습니다.app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EmployeeDto.kt (1)
9-11:role과workspace필드는 의도적인 설계로 중복이 아님검증 결과, 두 필드는 서로 다른 개념을 나타냅니다:
role: 사용자의 역할(직책)workspace: 작업 공간/조직 단위EmployeeDto와 Employee 모델 모두에 확립되어 있으며, UserMappers.kt에서 두 필드가 모두 정상적으로 매핑되고 있습니다. 백엔드 API가 두 필드를 모두 반환하고 있으며, 모든 레이어에서 일관되게 사용 중입니다. 불완전한 마이그레이션이나 중복 필드가 아니라 의도적인 설계입니다.
app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EditEmployeeResponseDto.kt (1)
3-8: 백엔드 API 응답 구조와의 호환성 확인 필요DTO 필드가
role에서workspace로 변경되었습니다. 백엔드 API가workspace필드를 반환하는지 확인해야 합니다. 백엔드가 아직 업데이트되지 않았다면 런타임에 역직렬화 오류가 발생할 수 있습니다.app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt (1)
36-36: workspace 필드 저장 및 로드 로직 추가 완료
USER_WORKSPACE키를 추가하고 암호화/복호화 로직이 올바르게 구현되었습니다.role필드와 별도로workspace필드가 저장되며, User 객체 생성 시 두 필드가 모두 포함됩니다.Also applies to: 55-55, 84-84, 91-91, 109-109
app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt (4)
31-63: getProfile 메서드 workspace 파라미터 업데이트 완료메서드가
workspace파라미터를 받아 API에 전달하고, 응답에서workspace필드를 User 객체에 올바르게 매핑합니다.role필드도 함께 유지되므로 User 모델이 두 필드를 모두 가지고 있는 것으로 보입니다.
107-141: editEmployee 메서드 workspace 파라미터 업데이트 완료Line 128의 fallback 로직(
takeIf { it.isNotBlank() })은 DTO에서 빈 문자열이 반환될 경우를 대비한 방어 코드입니다. Line 126에서employee.role이 여전히 사용되는 것으로 보아 Employee 모델에role과workspace필드가 모두 존재하는 것으로 확인됩니다.
144-178: updateEmployeeStatus 메서드 workspace 파라미터 업데이트 완료Line 165의 fallback 로직이 일관되게 적용되었으며, Line 163에서
role필드도 함께 유지됩니다. 구현이 올바릅니다.
181-197: getEmployeeCount에서 workspace 사용으로 변경 완료Line 184에서 저장된 사용자로부터
workspace를 읽어 API 호출에 사용합니다. 이전에는role을 사용했을 것으로 추정되며, 백엔드 API가 이 변경사항을 지원하는지 확인이 필요합니다.app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateEmployeeStatusUseCase.kt (1)
10-10: 파라미터 변경사항이 모든 호출부에 정상 적용됨검증 결과, UpdateEmployeeStatusUseCase의 호출은 UpdateEmployeeStatusViewModel.kt 한 곳에만 존재하며, 해당 위치에서 workspace 파라미터를 올바르게 전달하고 있습니다. 기존 "role" 파라미터를 사용하는 호출부는 발견되지 않았습니다.
- 호출 위치: UpdateEmployeeStatusViewModel.kt:73
- 호출 형태:
updateEmployeeStatusUseCase(updateEmployee, "AGENCY")- 결과: ✓ workspace 파라미터 정상 사용
app/src/main/java/com/sampoom/android/feature/user/domain/repository/UserRepository.kt (1)
10-14: 검토 의견이 코드 상황과 일치하지 않습니다현재 코드를 확인한 결과:
메서드 시그니처에 role 파라미터 없음: role은 도메인 모델(User, Employee)의 필드이지, 메서드 파라미터가 아닙니다. UserRepository 인터페이스의 메서드들은 role을 파라미터로 받지 않습니다.
모든 구현체 및 호출부가 올바르게 업데이트됨:
- GetProfileUseCase, EditEmployeeUseCase, UpdateEmployeeStatusUseCase에서 workspace 파라미터를 올바르게 전달
- UserRepositoryImpl이 인터페이스를 정확히 구현하고 있음
- 역호환성 문제 없음
Likely an incorrect or invalid review comment.
app/src/main/java/com/sampoom/android/feature/user/data/remote/api/UserApi.kt (1)
21-21: 백엔드 API 호환성 확인 필수검증 결과, 리뷰 의견이 정확합니다. Git 이력에서
@Query("role")에서@Query("workspace")로의 변경이 확실하며, 다음 4개 엔드포인트가 모두 영향을 받습니다:
getProfile()(21줄)editEmployee()(31줄)getEmployeeList()(38줄)updateEmployeeStatus()(48줄)코드베이스 전체에서 도메인 모델, 저장소 계층, 유스케이스가 일관되게
workspace파라미터를 사용하고 있으나, 백엔드가 이 파라미터 이름을 실제로 지원하는지 확인할 수 있는 API 문서나 테스트가 저장소에 없습니다.Git 커밋 이력(
05f4658 [REVERT] Workspace, Role 통합 롤백,3d150ff [REFAC] User Workspace 삭제 Role 통합)에서 이 파라미터가 여러 번 변경된 것으로 보아, 백엔드 팀과의 조율이 필요합니다.
app/src/main/java/com/sampoom/android/feature/auth/data/mapper/AuthMappers.kt
Show resolved
Hide resolved
app/src/main/java/com/sampoom/android/feature/user/domain/model/Employee.kt
Show resolved
Hide resolved
There was a problem hiding this comment.
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)
app/src/main/java/com/sampoom/android/feature/auth/ui/AuthViewModel.kt (1)
22-22: 사용되지 않는 의존성 주입
signOutUseCase가 주입되지만 실제로 사용되지 않습니다 (53번 라인에서 주석 처리됨).
- 만약 이 use case가 더 이상 필요하지 않다면 생성자에서 제거하세요
- 만약 임시로 비활성화한 것이라면, 가능한 빨리 정상적으로 호출되도록 수정해야 합니다
53번 라인의 주석을 해제하지 않을 경우, 다음 diff를 적용하여 사용하지 않는 의존성을 제거하세요:
@HiltViewModel class AuthViewModel @Inject constructor( private val checkLoginStateUseCase: CheckLoginStateUseCase, - private val signOutUseCase: SignOutUseCase, private val clearTokensUseCase: ClearTokensUseCase, tokenLogoutEmitter: TokenLogoutEmitter ) : ViewModel() {
🧹 Nitpick comments (1)
app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt (1)
87-89: 검증 로직 가독성 개선을 고려해주세요.13개의 필드를 검증하는 조건문이 2줄에 걸쳐 작성되어 있어 가독성이 떨어집니다. 유지보수성 향상을 위해 리팩토링을 고려해볼 수 있습니다.
예시:
val requiredFields = listOf( userId, userName, userEmail, accessToken, refreshToken, userPosition, userWorkspace, userBranch, userAgencyId, userStartedAt, userEndedAt ) if (requiredFields.all { it != null }) { // ... User 생성 로직 }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
app/build.gradle.kts(1 hunks)app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt(4 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/mapper/AuthMappers.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt(4 hunks)app/src/main/java/com/sampoom/android/feature/auth/ui/AuthViewModel.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt(5 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EditEmployeeResponseDto.kt(0 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EmployeeDto.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateEmployeeStatusResponseDto.kt(0 hunks)app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt(8 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/model/Employee.kt(1 hunks)app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt(1 hunks)
💤 Files with no reviewable changes (2)
- app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EditEmployeeResponseDto.kt
- app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateEmployeeStatusResponseDto.kt
🚧 Files skipped from review as they are similar to previous changes (4)
- app/src/main/java/com/sampoom/android/feature/user/domain/model/Employee.kt
- app/src/main/java/com/sampoom/android/feature/auth/data/mapper/AuthMappers.kt
- app/build.gradle.kts
- app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt
🧰 Additional context used
🧬 Code graph analysis (1)
app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt (1)
app/src/main/java/com/sampoom/android/core/util/DelayNetwork.kt (1)
retry(7-30)
🔇 Additional comments (20)
app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt (1)
13-13: 필드 변경이 올바르게 적용되었습니다.
role에서workspace로의 필드 변경이 올바르게 적용되었습니다.app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EmployeeDto.kt (1)
10-10: DTO 필드 변경이 적절합니다.도메인 모델과 일관되게
workspace필드가 추가되었습니다.app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt (5)
21-21: GetProfile 매핑이 올바르게 구현되었습니다.DTO의
workspace필드를 도메인 모델로 정확히 매핑하고 있습니다.
68-68: 직원 상태 업데이트 응답의 workspace 처리가 적절합니다.빈 문자열 기본값을 사용하고 있으며,
UserRepositoryImpl161번째 줄의 fallback 로직으로 안전하게 처리됩니다.
83-83: EmployeeDto 매핑이 올바릅니다.DTO의
workspace필드를 직접 전달하여 정확하게 매핑하고 있습니다.
42-42: workspace 기본값 설정은 올바릅니다.검증 결과,
UpdateProfileResponseDto에는 실제로workspace필드가 없으며, 매퍼에서workspace = ""로 기본값을 설정하는 것은 의도된 동작입니다. API 응답에workspace데이터가 포함되지 않을 때 도메인 모델에 필요한 필드에 대한 기본값을 제공하는 것이 적절한 처리이며, 이는EditEmployeeResponseDto와UpdateEmployeeStatusResponseDto매핑에서도 동일하게 적용되는 일관된 패턴입니다.
53-53: 작동 의도 확인됨 - 코드 승인검증 결과, 이 구현은 설계상 의도된 것으로 확인됩니다:
EditEmployeeResponseDto는 API 응답에서 수정 가능한 필드(userId, userName, position)만 포함하도록 설계됨- workspace는 API 응답에 포함되지 않는 것이 맞음 (수정 불가능한 필드)
- UserMappers.kt 53줄의 빈 문자열 초기화는 정상적인 동작
- UserRepositoryImpl 125줄의 fallback 로직이 기존 workspace 값을 올바르게 보존함
코드 변경사항에 문제가 없습니다.
app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt (8)
31-34: getProfile 메서드 시그니처 변경이 적절합니다.
workspace파라미터를 받아 API 호출에 전달하도록 올바르게 수정되었습니다.
48-48: User 객체 생성 시 workspace 매핑이 정확합니다.프로필 응답에서 받은
workspace값을 User 객체에 올바르게 할당하고 있습니다.
83-83: 프로필 업데이트 시 workspace 보존이 적절합니다.입력으로 받은 User의
workspace값을 업데이트된 User 객체에 전파하고 있습니다.
105-116: editEmployee 메서드의 workspace 처리가 올바릅니다.메서드 시그니처에
workspace파라미터를 추가하고, API 호출 시 정확히 전달하고 있습니다.
125-125: workspace fallback 로직이 안전하게 구현되었습니다.API 응답에서
workspace가 비어있을 경우 기존 직원의workspace값을 유지하는 방어적 코딩이 적용되어 있습니다.
141-152: updateEmployeeStatus의 workspace 파라미터 전달이 정확합니다.상태 업데이트 메서드에도
workspace가 일관되게 적용되었습니다.
161-161: 상태 업데이트 시 workspace fallback 처리가 적절합니다.직원 수정과 동일한 패턴으로 안전하게 workspace를 처리하고 있습니다.
177-184: getEmployeeCount에서 workspace 사용이 올바릅니다.저장된 사용자로부터
workspace를 읽어 API 호출에 전달하는 로직이 정확합니다.app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt (5)
35-35: workspace 키 추가가 적절합니다.다른 사용자 필드와 일관된 방식으로
USER_WORKSPACE키가 정의되었습니다.
53-53: workspace 암호화 저장이 올바르게 구현되었습니다.사용자의
workspace값을 암호화하여 안전하게 저장하고 있습니다.
81-81: workspace 읽기 로직이 정확합니다.저장된 암호화된
workspace값을 올바르게 읽어오고 있습니다.
103-108: UserPosition 안전한 파싱이 잘 구현되었습니다.잘못된 position 값에 대한 예외 처리를 추가하여
STAFF로 fallback하는 방어적 코딩이 적용되었습니다. 이는 데이터 무결성을 보장하는 좋은 개선사항입니다.
109-109: workspace 복호화 및 User 생성이 정확합니다.암호화된
workspace를 복호화하여 User 객체 생성에 올바르게 사용하고 있습니다.
📝 Summary
Workspace, Role 통합 롤백
🙏 Question & PR point
📬 Reference
Summary by CodeRabbit
새로운 기능
버그 수정 / 동작 변경
버전