Skip to content

Main 코드 업데이트#32

Merged
Sangyoon98 merged 9 commits intomainfrom
dev
Nov 9, 2025
Merged

Main 코드 업데이트#32
Sangyoon98 merged 9 commits intomainfrom
dev

Conversation

@Sangyoon98
Copy link
Member

@Sangyoon98 Sangyoon98 commented Nov 9, 2025

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 직원 관리 화면 추가 - 직원 목록 조회, 직원 상태 및 직책 편집 기능 포함
    • 사용자 프로필 편집 기능 추가
    • 대시보드에 직원 수 표시
    • 회원가입 기능 개선
  • 개선 사항

    • 관리자 권한을 직책 기반에서 역할 기반으로 변경
    • UI 버튼 스타일 및 간격 개선
    • 네비게이션 흐름 최적화

@coderabbitai
Copy link

coderabbitai bot commented Nov 9, 2025

Caution

Review failed

The pull request is closed.

개요

사용자 도메인을 독립적인 모듈로 재구성하고, 직원 관리 기능을 추가하는 대규모 리팩토링입니다. User 모델을 auth에서 user 도메인으로 이동하고, 새로운 저장소, 사용 사례 및 UI 계층을 구현합니다.

변경 사항

응집도 / 파일(들) 변경 요약
사용자 도메인 모델 및 저장소
app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt, app/src/main/java/com/sampoom/android/feature/user/domain/model/Employee.kt, app/src/main/java/com/sampoom/android/feature/user/domain/model/EmployeeList.kt, app/src/main/java/com/sampoom/android/core/model/EmployeeStatus.kt, app/src/main/java/com/sampoom/android/feature/user/domain/repository/UserRepository.kt, app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt
User 모델을 auth 도메인에서 user 도메인으로 이동, Employee 및 EmployeeList 도메인 모델 추가, EmployeeStatus 열거형 생성, 사용자 및 직원 관리를 위한 UserRepository 인터페이스 및 구현 추가
사용자 API 및 DTO
app/src/main/java/com/sampoom/android/feature/user/data/remote/api/UserApi.kt, app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/*
새로운 UserApi 인터페이스 추가(프로필, 직원 CRUD), GetProfileResponseDto, UpdateProfileRequestDto/ResponseDto, EmployeeDto, EmployeeListDto, EditEmployeeRequestDto/ResponseDto, UpdateEmployeeStatusRequestDto/ResponseDto DTO 추가
사용자 데이터 매핑 및 페이징
app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt, app/src/main/java/com/sampoom/android/feature/user/data/paging/EmployeePagingSource.kt
DTO에서 도메인 모델로 변환하는 확장 함수 추가, UserPosition 및 EmployeeStatus 매핑 헬퍼, 직원 페이징 소스 구현
사용자 도메인 사용 사례
app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetStoredUserUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetProfileUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateProfileUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetEmployeeUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetEmployeeCountUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/EditEmployeeUseCase.kt, app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateEmployeeStatusUseCase.kt
프로필 조회/업데이트, 직원 목록/카운트 조회, 직원 수정/상태 업데이트용 새로운 사용 사례 추가
직원 관리 UI 계층
app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListScreen.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListViewModel.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListUiState.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListUiEvent.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeBottomSheetType.kt
직원 목록 화면, ViewModel, UI 상태 및 이벤트 인터페이스 추가
직원 상태 편집 UI
app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusBottomSheet.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusViewModel.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusUiState.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusUiEvent.kt
직원 상태 업데이트용 바텀 시트, ViewModel, 상태 및 이벤트 추가
직원 정보 편집 UI
app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeBottomSheet.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeViewModel.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeUiState.kt, app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeUiEvent.kt
직원 정보 편집용 바텀 시트, ViewModel, 상태 및 이벤트 추가
프로필 편집 UI
app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileBottomSheet.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileViewModel.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileUiState.kt, app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileUiEvent.kt
사용자 프로필 편집용 바텀 시트, ViewModel, 상태 및 이벤트 추가
사용자 DI 모듈
app/src/main/java/com/sampoom/android/feature/user/di/UserModules.kt
UserRepository 및 UserApi에 대한 Hilt 바인딩 및 프로바이더 추가
인증 API 및 저장소 변경
app/src/main/java/com/sampoom/android/feature/auth/data/remote/api/AuthApi.kt, app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/UpdateProfileRequestDto.kt, app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/UpdateProfileResponseDto.kt, app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt, app/src/main/java/com/sampoom/android/feature/auth/domain/repository/AuthRepository.kt, app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/GetStoredUserUseCase.kt
AuthApi에서 signUp 엔드포인트 추가, 프로필 관련 엔드포인트 제거, getProfile 메서드 제거, UpdateProfile DTO 삭제
인증 도메인 및 UI 업데이트
app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/LoginUseCase.kt, app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/SignUpUseCase.kt, app/src/main/java/com/sampoom/android/feature/auth/ui/LoginViewModel.kt, app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpViewModel.kt, app/src/main/java/com/sampoom/android/feature/auth/data/mapper/AuthMappers.kt
User 모델 임포트를 user 도메인으로 변경, AuthValidator를 core.util로 이동, 로그인/가입 후 getProfile 호출 추가
대시보드 및 네비게이션 변경
app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardScreen.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardViewModel.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardUiState.kt
ROUTE_EMPLOYEE 네비게이션 상수 추가, DashboardScreen에 onEmployeeClick 콜백 추가, 직원 카운트 상태 및 로딩 추가, 직원 카운트 조회 기능 통합
설정 화면 리팩토링
app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingScreen.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingViewModel.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingUiState.kt, app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingUiEvent.kt
패키지를 setting에서 dashboard로 이동, 프로필 편집 바텀 시트 통합, refreshUser() 기능 추가, EditProfile 이벤트 제거
핵심 유틸리티 및 UI 컴포넌트
app/src/main/java/com/sampoom/android/core/util/AuthValidator.kt, app/src/main/java/com/sampoom/android/core/util/EmployeeStatusToKorean.kt, app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt, app/src/main/java/com/sampoom/android/core/network/TokenRefreshService.kt, app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt, app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt
AuthValidator를 auth.domain에서 core.util로 이동, EmployeeStatus 한글 변환 유틸리티 추가, User 임포트 경로 업데이트, CommonButton Secondary 변형 스타일 변경
기타 파일 정리
app/src/main/java/com/sampoom/android/feature/order/ui/OrderDetailContent.kt, app/src/main/java/com/sampoom/android/feature/order/ui/OrderItem.kt, app/src/main/java/com/sampoom/android/feature/outbound/*, app/src/main/java/com/sampoom/android/feature/part/ui/*, app/src/main/java/com/sampoom/android/core/di/NetworkModule.kt, app/src/main/java/com/sampoom/android/core/ui/theme/Type.kt
미사용 임포트 제거, 버튼 스타일 변경(Error → Secondary), 아이콘 색상 업데이트
리소스 문자열
app/src/main/res/values/strings.xml
직원 관리 및 프로필 편집용 새로운 문자열 리소스 추가

시퀀스 다이어그램

sequenceDiagram
    participant UI as 로그인 화면
    participant VM as LoginViewModel
    participant LU as LoginUseCase
    participant GU as GetProfileUseCase
    participant Repo as UserRepository
    participant Auth as AuthApi
    
    UI->>VM: 로그인 시도
    VM->>LU: invoke(email, password)
    LU->>Repo: signIn(email, password)
    Repo->>Auth: login(credentials)
    Auth-->>Repo: LoginResponseDto
    Repo-->>LU: Result<User>
    LU-->>VM: Result<User>
    
    rect rgb(200, 220, 255)
        Note over VM,GU: 신규: 로그인 후 프로필 조회
        VM->>GU: invoke("AGENCY")
        GU->>Repo: getProfile("AGENCY")
        Repo->>Auth: getProfile(workspace)
        Auth-->>Repo: GetProfileResponseDto
        Repo-->>GU: Result<User>
        GU-->>VM: Result<User>
    end
    
    alt 성공
        VM->>UI: loading=false, success=true
    else 실패
        VM->>UI: error 메시지 표시
    end
Loading

예상 코드 리뷰 노력

🎯 4 (복잡함) | ⏱️ ~60분

주의가 필요한 영역:

  • User 도메인 이동: auth 도메인에서 user 도메인으로 대규모 모델 마이그레이션. 모든 import 경로가 올바르게 업데이트되었는지, 순환 의존성이 없는지 확인 필요
  • 새로운 UserRepository 및 구현: 페이징, 토큰 관리, 에러 처리 로직이 복잡하고 여러 곳에서 호출될 예정. 토큰 보존 로직 및 저장소 동작 검증 필수
  • LoginViewModel 및 SignUpViewModel 변경: 로그인/가입 후 새로운 getProfile 흐름이 추가되었음. 에러 처리 및 UI 상태 업데이트가 올바른지 확인 필요
  • 직원 관리 기능: 새로운 여러 ViewModel, UseCase, DTO가 추가됨. EmployeeListScreen의 페이징 및 바텀 시트 상호작용 검증 필수
  • DashboardScreen 역할 기반 로직: 기존 position 기반 체크에서 user?.role == "ADMIN"으로 변경. 권한 검증이 정확한지 확인 필요
  • Settings 화면 이동: feature.setting에서 feature.dashboard로 패키지 이동. 다른 곳에서의 import 참조가 모두 업데이트되었는지 확인

관련 PR

제안 라벨

ready-to-merge

제안 검토자

  • Lee-Jong-Jin
  • yangjiseonn
  • vivivim

시 🐰

사용자 도메인 새로운 집을 짓고 🏠
직원들을 관리하는 마법을 더하고 ✨
프로필 수정 기능도 쏘옥 추가하여 ✋
대시보드는 더욱 멋져졌단다!
리팩토링의 춤을 춘 오늘 🎉

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7e2913c and 6cd3052.

📒 Files selected for processing (84)
  • app/src/main/java/com/sampoom/android/MainActivityViewModel.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/app/navigation/AppNavHost.kt (3 hunks)
  • app/src/main/java/com/sampoom/android/core/di/NetworkModule.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/model/EmployeeStatus.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/network/TokenRefreshService.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/preferences/AuthPreferences.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/ui/component/CommonButton.kt (2 hunks)
  • app/src/main/java/com/sampoom/android/core/ui/component/CommonTextField.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/ui/theme/Type.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/core/util/AuthValidator.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/core/util/EmployeeStatusToKorean.kt (1 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/api/AuthApi.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/UpdateProfileRequestDto.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/data/remote/dto/UpdateProfileResponseDto.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/data/repository/AuthRepositoryImpl.kt (2 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/GetStoredUserUseCase.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/domain/usecase/LoginUseCase.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/LoginViewModel.kt (4 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpScreen.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/auth/ui/SignUpViewModel.kt (4 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardScreen.kt (12 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/DashboardViewModel.kt (5 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingScreen.kt (7 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingUiEvent.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/dashboard/ui/SettingViewModel.kt (3 hunks)
  • app/src/main/java/com/sampoom/android/feature/order/ui/OrderDetailContent.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/order/ui/OrderItem.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/outbound/di/OutboundModules.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/outbound/ui/OutboundListScreen.kt (2 hunks)
  • app/src/main/java/com/sampoom/android/feature/outbound/ui/OutboundListViewModel.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartDetailBottomSheet.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartListScreen.kt (2 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartListViewModel.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartScreen.kt (3 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartUiState.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/part/ui/PartViewModel.kt (0 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/mapper/UserMappers.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/paging/EmployeePagingSource.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/remote/api/UserApi.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/EditEmployeeRequestDto.kt (1 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/EmployeeListDto.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/GetProfileResponseDto.kt (2 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateEmployeeStatusRequestDto.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/remote/dto/UpdateProfileRequestDto.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/remote/dto/UpdateProfileResponseDto.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/data/repository/UserRepositoryImpl.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/di/UserModules.kt (1 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/EmployeeList.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/domain/model/User.kt (2 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/GetEmployeeCountUseCase.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/domain/usecase/GetEmployeeUseCase.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/GetStoredUserUseCase.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateEmployeeStatusUseCase.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/domain/usecase/UpdateProfileUseCase.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeBottomSheet.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeUiEvent.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EditEmployeeViewModel.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeBottomSheetType.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListScreen.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListUiEvent.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/EmployeeListViewModel.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusBottomSheet.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusUiEvent.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateEmployeeStatusViewModel.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileBottomSheet.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileUiEvent.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileUiState.kt (1 hunks)
  • app/src/main/java/com/sampoom/android/feature/user/ui/UpdateProfileViewModel.kt (1 hunks)
  • app/src/main/res/values/strings.xml (2 hunks)

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

@taemin3 taemin3 left a comment

Choose a reason for hiding this comment

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

확인했습니다

@Sangyoon98 Sangyoon98 merged commit 9e9aede into main Nov 9, 2025
5 of 6 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