diff --git a/SampoomManagement.xcodeproj/project.pbxproj b/SampoomManagement.xcodeproj/project.pbxproj index ba2fc45..c6e7ce1 100644 --- a/SampoomManagement.xcodeproj/project.pbxproj +++ b/SampoomManagement.xcodeproj/project.pbxproj @@ -284,7 +284,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_TEAM = B9PUAVBBKX; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -300,7 +300,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 1.0.6; PRODUCT_BUNDLE_IDENTIFIER = com.sampoom.ios; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -319,7 +319,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_TEAM = B9PUAVBBKX; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -335,7 +335,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 1.0.6; PRODUCT_BUNDLE_IDENTIFIER = com.sampoom.ios; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; diff --git a/SampoomManagement/Core/Network/TokenRefreshService.swift b/SampoomManagement/Core/Network/TokenRefreshService.swift index 27735ea..29ef11c 100644 --- a/SampoomManagement/Core/Network/TokenRefreshService.swift +++ b/SampoomManagement/Core/Network/TokenRefreshService.swift @@ -57,7 +57,6 @@ class TokenRefreshService { refreshToken: dto.refreshToken, expiresIn: dto.expiresIn, position: existingUser.position, - workspace: existingUser.workspace, branch: existingUser.branch, agencyId: existingUser.agencyId, startedAt: existingUser.startedAt, diff --git a/SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift b/SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift index 75048ff..742e2cc 100644 --- a/SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift +++ b/SampoomManagement/Features/Auth/Data/Local/Preferences/AuthPreferences.swift @@ -19,7 +19,6 @@ class AuthPreferences { static let userRole = "auth.userRole" static let expiresIn = "auth.expiresIn" static let position = "auth.position" - static let workspace = "auth.workspace" static let branch = "auth.branch" static let agencyId = "auth.agencyId" static let startedAt = "auth.startedAt" @@ -33,10 +32,9 @@ class AuthPreferences { try keychain.save(String(user.id), for: Keys.userId) try keychain.save(user.name, for: Keys.userName) try keychain.save(user.email, for: Keys.userEmail) - try keychain.save(user.role.rawValue, for: Keys.userRole) + try keychain.save(user.role, for: Keys.userRole) try keychain.save(String(user.expiresIn), for: Keys.expiresIn) try keychain.save(user.position.rawValue, for: Keys.position) - try keychain.save(user.workspace, for: Keys.workspace) try keychain.save(user.branch, for: Keys.branch) try keychain.save(String(user.agencyId), for: Keys.agencyId) try keychain.save(user.startedAt ?? "", for: Keys.startedAt) @@ -51,7 +49,6 @@ class AuthPreferences { try? keychain.delete(Keys.userRole) try? keychain.delete(Keys.expiresIn) try? keychain.delete(Keys.position) - try? keychain.delete(Keys.workspace) try? keychain.delete(Keys.branch) try? keychain.delete(Keys.agencyId) try? keychain.delete(Keys.startedAt) @@ -87,7 +84,6 @@ class AuthPreferences { } // Tolerate missing profile keys by defaulting to safe values let positionRaw = (try? keychain.get(Keys.position)) ?? "" - let workspace = (try? keychain.get(Keys.workspace)) ?? "" let branch = (try? keychain.get(Keys.branch)) ?? "" let userEmail = (try? keychain.get(Keys.userEmail)) ?? "" let agencyId = Int((try? keychain.get(Keys.agencyId)) ?? "0") ?? 0 @@ -98,12 +94,11 @@ class AuthPreferences { id: userId, name: userName, email: userEmail, - role: UserRole(rawValue: userRole) ?? .user, + role: userRole, accessToken: accessToken, refreshToken: refreshToken, expiresIn: expiresIn, position: UserPosition(rawValue: positionRaw) ?? .staff, - workspace: workspace, branch: branch, agencyId: agencyId, startedAt: startedAt?.isEmpty == false ? startedAt : nil, @@ -152,7 +147,6 @@ class AuthPreferences { try keychain.delete(Keys.userRole) try keychain.delete(Keys.expiresIn) try keychain.delete(Keys.position) - try keychain.delete(Keys.workspace) try keychain.delete(Keys.branch) try keychain.delete(Keys.agencyId) try keychain.delete(Keys.startedAt) diff --git a/SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift b/SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift index 92146c0..0540cdb 100644 --- a/SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift +++ b/SampoomManagement/Features/Auth/Data/Mappers/AuthMappers.swift @@ -13,12 +13,11 @@ extension LoginResponseDTO { id: self.userId, name: "", email: "", - role: .user, + role: "", accessToken: self.accessToken, refreshToken: self.refreshToken, expiresIn: self.expiresIn, position: .staff, - workspace: "", branch: "", agencyId: 0, startedAt: nil, diff --git a/SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift b/SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift index f57649f..85be192 100644 --- a/SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift +++ b/SampoomManagement/Features/Auth/Data/Remote/API/AuthAPI.swift @@ -17,10 +17,10 @@ class AuthAPI { // 로그인 func login(email: String, password: String) async throws -> APIResponse { - let requestDTO = LoginRequestDTO(workspace: "AGENCY", email: email, password: password) + let requestDTO = LoginRequestDTO(role: "AGENCY", email: email, password: password) let parameters: [String: Any] = [ - "workspace": requestDTO.workspace, + "role": requestDTO.role, "email": requestDTO.email, "password": requestDTO.password ] @@ -37,14 +37,14 @@ class AuthAPI { func signup( email: String, password: String, - workspace: String, + role: String, branch: String, userName: String, position: String ) async throws -> APIResponse { let requestDTO = SignupRequestDTO( userName: userName, - workspace: workspace, + role: role, branch: branch, position: position, email: email, @@ -54,7 +54,7 @@ class AuthAPI { let parameters: [String: Any] = [ "email": requestDTO.email, "password": requestDTO.password, - "workspace": requestDTO.workspace, + "role": requestDTO.role, "branch": requestDTO.branch, "userName": requestDTO.userName, "position": requestDTO.position diff --git a/SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift b/SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift index 9a9922f..31af598 100644 --- a/SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift +++ b/SampoomManagement/Features/Auth/Data/Remote/DTO/LoginRequestDTO.swift @@ -8,7 +8,7 @@ import Foundation struct LoginRequestDTO: Codable { - let workspace: String + let role: String let email: String let password: String } diff --git a/SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift b/SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift index e1d586c..2270d69 100644 --- a/SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift +++ b/SampoomManagement/Features/Auth/Data/Remote/DTO/SignupRequestDTO.swift @@ -9,7 +9,7 @@ import Foundation struct SignupRequestDTO: Codable { let userName: String - let workspace: String + let role: String let branch: String let position: String let email: String diff --git a/SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift b/SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift index 7271c68..19cdb02 100644 --- a/SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift +++ b/SampoomManagement/Features/Auth/Data/Repository/AuthRepositoryImpl.swift @@ -19,7 +19,7 @@ class AuthRepositoryImpl: AuthRepository { // 회원가입 func signUp( userName: String, - workspace: String, + role: String, branch: String, position: String, email: String, @@ -28,7 +28,7 @@ class AuthRepositoryImpl: AuthRepository { _ = try await api.signup( email: email, password: password, - workspace: workspace, + role: role, branch: branch, userName: userName, position: position @@ -104,7 +104,6 @@ class AuthRepositoryImpl: AuthRepository { refreshToken: dto.refreshToken, expiresIn: dto.expiresIn, position: existingUser.position, - workspace: existingUser.workspace, branch: existingUser.branch, agencyId: existingUser.agencyId, startedAt: existingUser.startedAt, diff --git a/SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift b/SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift index c9e7c43..679db3e 100644 --- a/SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift +++ b/SampoomManagement/Features/Auth/Domain/Repository/AuthRepository.swift @@ -10,7 +10,7 @@ import Foundation protocol AuthRepository { func signUp( userName: String, - workspace: String, + role: String, branch: String, position: String, email: String, diff --git a/SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift b/SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift index 4ccf761..ce7a28e 100644 --- a/SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift +++ b/SampoomManagement/Features/Auth/Domain/UseCase/SignUpUseCase.swift @@ -16,7 +16,7 @@ class SignUpUseCase { func execute( userName: String, - workspace: String, + role: String, branch: String, position: String, email: String, @@ -24,7 +24,7 @@ class SignUpUseCase { ) async throws -> User { return try await repository.signUp( userName: userName, - workspace: workspace, + role: role, branch: branch, position: position, email: email, diff --git a/SampoomManagement/Features/Auth/UI/LoginViewModel.swift b/SampoomManagement/Features/Auth/UI/LoginViewModel.swift index d14cbb1..6a2b293 100644 --- a/SampoomManagement/Features/Auth/UI/LoginViewModel.swift +++ b/SampoomManagement/Features/Auth/UI/LoginViewModel.swift @@ -50,7 +50,7 @@ class LoginViewModel: ObservableObject { _ = try await loginUseCase.execute(email: email, password: password) // 로그인 성공 후 프로필 조회 do { - _ = try await getProfileUseCase.execute(workspace: "AGENCY") + _ = try await getProfileUseCase.execute(role: "AGENCY") uiState = uiState.copy(loading: false, success: true) } catch { uiState = uiState.copy(loading: false) diff --git a/SampoomManagement/Features/Auth/UI/SignUpUiState.swift b/SampoomManagement/Features/Auth/UI/SignUpUiState.swift index 3d0dfe4..87086a5 100644 --- a/SampoomManagement/Features/Auth/UI/SignUpUiState.swift +++ b/SampoomManagement/Features/Auth/UI/SignUpUiState.swift @@ -9,7 +9,7 @@ import Foundation struct SignUpUiState: UIState { let name: String - let workspace: String + let role: String let branch: String let position: String let email: String @@ -35,7 +35,7 @@ struct SignUpUiState: UIState { init( name: String = "", - workspace: String = "AGENCY", + role: String = "AGENCY", branch: String = "", position: String = "", email: String = "", @@ -55,7 +55,7 @@ struct SignUpUiState: UIState { success: Bool = false ) { self.name = name - self.workspace = workspace + self.role = role self.branch = branch self.position = position self.email = email @@ -92,7 +92,7 @@ struct SignUpUiState: UIState { func copy( name: String? = nil, - workspace: String? = nil, + role: String? = nil, branch: String? = nil, position: String? = nil, email: String? = nil, @@ -113,7 +113,7 @@ struct SignUpUiState: UIState { ) -> SignUpUiState { return SignUpUiState( name: name ?? self.name, - workspace: workspace ?? self.workspace, + role: role ?? self.role, branch: branch ?? self.branch, position: position ?? self.position, email: email ?? self.email, diff --git a/SampoomManagement/Features/Auth/UI/SignUpViewModel.swift b/SampoomManagement/Features/Auth/UI/SignUpViewModel.swift index 7e28f56..1f75b50 100644 --- a/SampoomManagement/Features/Auth/UI/SignUpViewModel.swift +++ b/SampoomManagement/Features/Auth/UI/SignUpViewModel.swift @@ -82,7 +82,7 @@ class SignUpViewModel: ObservableObject { guard uiState.isValid else { return } let name = uiState.name - let workspace = uiState.workspace + let role = uiState.role let branch = uiState.branch let position = uiState.position let email = uiState.email @@ -93,14 +93,14 @@ class SignUpViewModel: ObservableObject { do { _ = try await signUpUseCase.execute( userName: name, - workspace: workspace, + role: role, branch: branch, position: position, email: email, password: password ) // 회원가입 성공 후 프로필 조회 - _ = try await getProfileUseCase.execute(workspace: "AGENCY") + _ = try await getProfileUseCase.execute(role: "AGENCY") uiState = uiState.copy(loading: false, success: true) } catch { uiState = uiState.copy(loading: false) diff --git a/SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift b/SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift index 5b5c8b0..55ebe9d 100644 --- a/SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift +++ b/SampoomManagement/Features/Dashboard/UI/DashboardViewModel.swift @@ -129,10 +129,10 @@ class DashboardViewModel: ObservableObject { ) return } - let workspace = storedUser.workspace.isEmpty ? "AGENCY" : storedUser.workspace + let role = storedUser.role.isEmpty ? "AGENCY" : storedUser.role let count = try await getEmployeeCountUseCase.execute( - workspace: workspace, + role: role, organizationId: storedUser.agencyId ) diff --git a/SampoomManagement/Features/Order/Data/Remote/DTO/OrderRequestDto.swift b/SampoomManagement/Features/Order/Data/Remote/DTO/OrderRequestDto.swift index 27ff1e9..1f5e619 100644 --- a/SampoomManagement/Features/Order/Data/Remote/DTO/OrderRequestDto.swift +++ b/SampoomManagement/Features/Order/Data/Remote/DTO/OrderRequestDto.swift @@ -9,6 +9,7 @@ import Foundation /// 주문 생성 요청 DTO struct OrderRequestDto: Codable { + let agencyId: Int let agencyName: String let items: [OrderCategoryDto] } diff --git a/SampoomManagement/Features/Order/Data/Repository/OrderRepositoryImpl.swift b/SampoomManagement/Features/Order/Data/Repository/OrderRepositoryImpl.swift index 5884716..1048cc2 100644 --- a/SampoomManagement/Features/Order/Data/Repository/OrderRepositoryImpl.swift +++ b/SampoomManagement/Features/Order/Data/Repository/OrderRepositoryImpl.swift @@ -53,6 +53,7 @@ class OrderRepositoryImpl: OrderRepository { ) } let request = OrderRequestDto( + agencyId: user.agencyId, agencyName: user.branch, items: items ) diff --git a/SampoomManagement/Features/User/Data/Mappers/UserMappers.swift b/SampoomManagement/Features/User/Data/Mappers/UserMappers.swift index 254dbda..99fec9c 100644 --- a/SampoomManagement/Features/User/Data/Mappers/UserMappers.swift +++ b/SampoomManagement/Features/User/Data/Mappers/UserMappers.swift @@ -13,12 +13,11 @@ extension GetProfileResponseDTO { id: self.userId, name: self.userName, email: self.email, - role: UserRole(rawValue: self.role) ?? .user, + role: self.role, accessToken: "", refreshToken: "", expiresIn: 0, position: UserPosition(rawValue: self.position) ?? .staff, - workspace: self.workspace, branch: self.branch, agencyId: self.organizationId, startedAt: self.startedAt.isEmpty ? nil : self.startedAt, @@ -33,12 +32,11 @@ extension UpdateProfileResponseDTO { id: self.userId, name: self.userName, email: "", - role: .user, + role: "", accessToken: "", refreshToken: "", expiresIn: 0, position: .staff, - workspace: "", branch: "", agencyId: 0, startedAt: nil, @@ -53,9 +51,8 @@ extension EditEmployeeResponseDTO { id: self.userId, userId: self.userId, email: "", - role: "", + role: self.role, userName: self.userName, - workspace: self.workspace, organizationId: 0, branch: "", position: UserPosition(rawValue: self.position) ?? .staff, @@ -76,7 +73,6 @@ extension EmployeeDTO { email: self.email, role: self.role, userName: self.userName, - workspace: self.workspace, organizationId: self.organizationId, branch: self.branch, position: UserPosition(rawValue: self.position) ?? .staff, @@ -95,9 +91,8 @@ extension UpdateEmployeeStatusResponseDTO { id: existingEmployee.id, userId: self.userId, email: existingEmployee.email, - role: existingEmployee.role, + role: self.role.isEmpty ? existingEmployee.role : self.role, userName: self.userName.isEmpty ? existingEmployee.userName : self.userName, - workspace: self.workspace.isEmpty ? existingEmployee.workspace : self.workspace, organizationId: existingEmployee.organizationId, branch: existingEmployee.branch, position: existingEmployee.position, diff --git a/SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift b/SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift index 1159e79..15de3f9 100644 --- a/SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift +++ b/SampoomManagement/Features/User/Data/Remote/API/UserAPI.swift @@ -16,9 +16,9 @@ class UserAPI { } // 프로필 조회 - func getProfile(workspace: String = "AGENCY") async throws -> APIResponse { + func getProfile(role: String = "AGENCY") async throws -> APIResponse { return try await networkManager.request( - endpoint: "user/profile?workspace=\(workspace)", + endpoint: "user/profile?role=\(role)", method: .get, parameters: nil, responseType: GetProfileResponseDTO.self @@ -42,9 +42,9 @@ class UserAPI { } // 직원 목록 조회 - func getEmployeeList(workspace: String, organizationId: Int, page: Int = 0, size: Int = 20) async throws -> APIResponse { + func getEmployeeList(role: String, organizationId: Int, page: Int = 0, size: Int = 20) async throws -> APIResponse { return try await networkManager.request( - endpoint: "user/info?workspace=\(workspace)&organizationId=\(organizationId)&page=\(page)&size=\(size)", + endpoint: "user/info?role=\(role)&organizationId=\(organizationId)&page=\(page)&size=\(size)", method: .get, parameters: nil, responseType: EmployeeListDTO.self @@ -52,7 +52,7 @@ class UserAPI { } // 직원 수정 - func editEmployee(userId: Int, workspace: String, position: String) async throws -> APIResponse { + func editEmployee(userId: Int, role: String, position: String) async throws -> APIResponse { let requestDTO = EditEmployeeRequestDTO(position: position) let parameters: [String: Any] = [ @@ -60,7 +60,7 @@ class UserAPI { ] return try await networkManager.request( - endpoint: "user/profile/\(userId)?workspace=\(workspace)", + endpoint: "user/profile/\(userId)?role=\(role)", method: .patch, parameters: parameters, responseType: EditEmployeeResponseDTO.self @@ -68,7 +68,7 @@ class UserAPI { } // 직원 상태 수정 - func updateEmployeeStatus(userId: Int, workspace: String, employeeStatus: String) async throws -> APIResponse { + func updateEmployeeStatus(userId: Int, role: String, employeeStatus: String) async throws -> APIResponse { let requestDTO = UpdateEmployeeStatusRequestDTO(employeeStatus: employeeStatus) let parameters: [String: Any] = [ @@ -76,7 +76,7 @@ class UserAPI { ] return try await networkManager.request( - endpoint: "user/status/\(userId)?workspace=\(workspace)", + endpoint: "user/status/\(userId)?role=\(role)", method: .patch, parameters: parameters, responseType: UpdateEmployeeStatusResponseDTO.self diff --git a/SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift b/SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift index c14a2b0..be43a5e 100644 --- a/SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift +++ b/SampoomManagement/Features/User/Data/Remote/DTO/EditEmployeeResponseDTO.swift @@ -10,7 +10,7 @@ import Foundation struct EditEmployeeResponseDTO: Codable { let userId: Int let userName: String - let workspace: String + let role: String let position: String } diff --git a/SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift b/SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift index 2b9d3bf..f32ffe3 100644 --- a/SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift +++ b/SampoomManagement/Features/User/Data/Remote/DTO/EmployeeDTO.swift @@ -12,7 +12,6 @@ struct EmployeeDTO: Codable { let email: String let role: String let userName: String - let workspace: String let organizationId: Int let branch: String let position: String diff --git a/SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift b/SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift index 4d50250..4a504d7 100644 --- a/SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift +++ b/SampoomManagement/Features/User/Data/Remote/DTO/GetProfileResponseDTO.swift @@ -13,7 +13,6 @@ struct GetProfileResponseDTO: Codable { let email: String let role: String let position: String - let workspace: String let branch: String let organizationId: Int let startedAt: String diff --git a/SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift b/SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift index fac1297..2696e6e 100644 --- a/SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift +++ b/SampoomManagement/Features/User/Data/Remote/DTO/UpdateEmployeeStatusResponseDTO.swift @@ -10,7 +10,7 @@ import Foundation struct UpdateEmployeeStatusResponseDTO: Codable { let userId: Int let userName: String - let workspace: String + let role: String let employeeStatus: String } diff --git a/SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift b/SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift index 04ee16b..53fdc15 100644 --- a/SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift +++ b/SampoomManagement/Features/User/Data/Repository/UserRepositoryImpl.swift @@ -20,10 +20,10 @@ class UserRepositoryImpl: UserRepository { return try preferences.getStoredUser() } - func getProfile(workspace: String) async throws -> User { + func getProfile(role: String) async throws -> User { // 프로필 조회 (서버 반영 지연 고려하여 재시도) let profileUser = try await retry(times: 5, initialDelayMs: 300, maxDelayMs: 1500, factor: 1.8) { - let profileResponse = try await self.api.getProfile(workspace: workspace) + let profileResponse = try await self.api.getProfile(role: role) guard let profileDto = profileResponse.data else { throw NetworkError.serverError(profileResponse.status, message: profileResponse.message) } @@ -45,7 +45,6 @@ class UserRepositoryImpl: UserRepository { refreshToken: loginUser.refreshToken, expiresIn: loginUser.expiresIn, position: profileUser.position, - workspace: profileUser.workspace, branch: profileUser.branch, agencyId: profileUser.agencyId, startedAt: profileUser.startedAt, @@ -81,7 +80,6 @@ class UserRepositoryImpl: UserRepository { refreshToken: storedUser.refreshToken, expiresIn: storedUser.expiresIn, position: user.position, - workspace: user.workspace, branch: user.branch, agencyId: user.agencyId, startedAt: user.startedAt, @@ -94,8 +92,8 @@ class UserRepositoryImpl: UserRepository { return completeUser } - func getEmployeeList(workspace: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) { - let response = try await api.getEmployeeList(workspace: workspace, organizationId: organizationId, page: page, size: size) + func getEmployeeList(role: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) { + let response = try await api.getEmployeeList(role: role, organizationId: organizationId, page: page, size: size) guard let dto = response.data else { throw NetworkError.serverError(response.status, message: response.message) } @@ -104,8 +102,8 @@ class UserRepositoryImpl: UserRepository { return (employees: employees, hasNext: dto.meta.hasNext) } - func editEmployee(employee: Employee, workspace: String) async throws -> Employee { - let response = try await api.editEmployee(userId: employee.userId, workspace: workspace, position: employee.position.rawValue) + func editEmployee(employee: Employee, role: String) async throws -> Employee { + let response = try await api.editEmployee(userId: employee.userId, role: role, position: employee.position.rawValue) guard let dto = response.data else { throw NetworkError.serverError(response.status, message: response.message) } @@ -117,9 +115,8 @@ class UserRepositoryImpl: UserRepository { id: updatedEmployee.userId, userId: updatedEmployee.userId, email: employee.email, - role: employee.role, + role: updatedEmployee.role.isEmpty ? employee.role : updatedEmployee.role, userName: updatedEmployee.userName.isEmpty ? employee.userName : updatedEmployee.userName, - workspace: updatedEmployee.workspace.isEmpty ? employee.workspace : updatedEmployee.workspace, organizationId: employee.organizationId, branch: employee.branch, position: updatedEmployee.position, @@ -133,10 +130,10 @@ class UserRepositoryImpl: UserRepository { return completeEmployee } - func updateEmployeeStatus(employee: Employee, workspace: String) async throws -> Employee { + func updateEmployeeStatus(employee: Employee, role: String) async throws -> Employee { let response = try await api.updateEmployeeStatus( userId: employee.userId, - workspace: workspace, + role: role, employeeStatus: employee.status.rawValue ) @@ -148,8 +145,8 @@ class UserRepositoryImpl: UserRepository { return updatedEmployee } - func getEmployeeCount(workspace: String, organizationId: Int) async throws -> Int { - let response = try await api.getEmployeeList(workspace: workspace, organizationId: organizationId, page: 0, size: 1) + func getEmployeeCount(role: String, organizationId: Int) async throws -> Int { + let response = try await api.getEmployeeList(role: role, organizationId: organizationId, page: 0, size: 1) guard let dto = response.data else { throw NetworkError.serverError(response.status, message: response.message) } diff --git a/SampoomManagement/Features/User/Domain/Models/Employee.swift b/SampoomManagement/Features/User/Domain/Models/Employee.swift index ad78218..18820b6 100644 --- a/SampoomManagement/Features/User/Domain/Models/Employee.swift +++ b/SampoomManagement/Features/User/Domain/Models/Employee.swift @@ -13,7 +13,6 @@ struct Employee: Equatable, Identifiable { let email: String let role: String let userName: String - let workspace: String let organizationId: Int let branch: String let position: UserPosition diff --git a/SampoomManagement/Features/User/Domain/Models/User.swift b/SampoomManagement/Features/User/Domain/Models/User.swift index f4e8c2d..cba5c19 100644 --- a/SampoomManagement/Features/User/Domain/Models/User.swift +++ b/SampoomManagement/Features/User/Domain/Models/User.swift @@ -7,35 +7,15 @@ import Foundation -enum UserRole: String, Codable, Equatable { - case admin = "ADMIN" - case user = "USER" - case manager = "MANAGER" - // Additional roles provided - case staff = "STAFF" - case seniorStaff = "SENIOR_STAFF" - case assistantManager = "ASSISTANT_MANAGER" - case deputyGeneralManager = "DEPUTY_GENERAL_MANAGER" - case generalManager = "GENERAL_MANAGER" - case director = "DIRECTOR" - case vicePresident = "VICE_PRESIDENT" - case president = "PRESIDENT" - case chairman = "CHAIRMAN" - - var isAdmin: Bool { self == .admin } -} - struct User: Equatable { let id: Int let name: String let email: String - let role: UserRole + let role: String let accessToken: String let refreshToken: String let expiresIn: Int - // Additional profile fields merged after login let position: UserPosition - let workspace: String let branch: String let agencyId: Int let startedAt: String? diff --git a/SampoomManagement/Features/User/Domain/Repository/UserRepository.swift b/SampoomManagement/Features/User/Domain/Repository/UserRepository.swift index 8ee0511..d7255c9 100644 --- a/SampoomManagement/Features/User/Domain/Repository/UserRepository.swift +++ b/SampoomManagement/Features/User/Domain/Repository/UserRepository.swift @@ -9,11 +9,11 @@ import Foundation protocol UserRepository { func getStoredUser() throws -> User? - func getProfile(workspace: String) async throws -> User + func getProfile(role: String) async throws -> User func updateProfile(user: User) async throws -> User - func getEmployeeList(workspace: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) - func editEmployee(employee: Employee, workspace: String) async throws -> Employee - func updateEmployeeStatus(employee: Employee, workspace: String) async throws -> Employee - func getEmployeeCount(workspace: String, organizationId: Int) async throws -> Int + func getEmployeeList(role: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) + func editEmployee(employee: Employee, role: String) async throws -> Employee + func updateEmployeeStatus(employee: Employee, role: String) async throws -> Employee + func getEmployeeCount(role: String, organizationId: Int) async throws -> Int } diff --git a/SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift b/SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift index 85815fe..c24d3bd 100644 --- a/SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift +++ b/SampoomManagement/Features/User/Domain/UseCase/EditEmployeeUseCase.swift @@ -14,8 +14,8 @@ class EditEmployeeUseCase { self.repository = repository } - func execute(employee: Employee, workspace: String) async throws -> Employee { - return try await repository.editEmployee(employee: employee, workspace: workspace) + func execute(employee: Employee, role: String) async throws -> Employee { + return try await repository.editEmployee(employee: employee, role: role) } } diff --git a/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift b/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift index aca2a60..7df7c42 100644 --- a/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift +++ b/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeCountUseCase.swift @@ -14,8 +14,8 @@ class GetEmployeeCountUseCase { self.repository = repository } - func execute(workspace: String, organizationId: Int) async throws -> Int { - return try await repository.getEmployeeCount(workspace: workspace, organizationId: organizationId) + func execute(role: String, organizationId: Int) async throws -> Int { + return try await repository.getEmployeeCount(role: role, organizationId: organizationId) } } diff --git a/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift b/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift index b52cec1..5074fd4 100644 --- a/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift +++ b/SampoomManagement/Features/User/Domain/UseCase/GetEmployeeUseCase.swift @@ -14,8 +14,8 @@ class GetEmployeeUseCase { self.repository = repository } - func execute(workspace: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) { - return try await repository.getEmployeeList(workspace: workspace, organizationId: organizationId, page: page, size: size) + func execute(role: String, organizationId: Int, page: Int, size: Int) async throws -> (employees: [Employee], hasNext: Bool) { + return try await repository.getEmployeeList(role: role, organizationId: organizationId, page: page, size: size) } } diff --git a/SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift b/SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift index 916133f..ba1cc94 100644 --- a/SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift +++ b/SampoomManagement/Features/User/Domain/UseCase/GetProfileUseCase.swift @@ -14,8 +14,8 @@ class GetProfileUseCase { self.repository = repository } - func execute(workspace: String) async throws -> User { - return try await repository.getProfile(workspace: workspace) + func execute(role: String) async throws -> User { + return try await repository.getProfile(role: role) } } diff --git a/SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift b/SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift index d41ebe8..54f739c 100644 --- a/SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift +++ b/SampoomManagement/Features/User/Domain/UseCase/UpdateEmployeeStatusUseCase.swift @@ -14,8 +14,8 @@ class UpdateEmployeeStatusUseCase { self.repository = repository } - func execute(employee: Employee, workspace: String) async throws -> Employee { - return try await repository.updateEmployeeStatus(employee: employee, workspace: workspace) + func execute(employee: Employee, role: String) async throws -> Employee { + return try await repository.updateEmployeeStatus(employee: employee, role: role) } } diff --git a/SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift b/SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift index 044a2f0..564d799 100644 --- a/SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift +++ b/SampoomManagement/Features/User/UI/EditEmployeeViewModel.swift @@ -58,7 +58,6 @@ class EditEmployeeViewModel: ObservableObject { email: currentEmployee.email, role: currentEmployee.role, userName: currentEmployee.userName, - workspace: currentEmployee.workspace, organizationId: currentEmployee.organizationId, branch: currentEmployee.branch, position: position, @@ -70,7 +69,7 @@ class EditEmployeeViewModel: ObservableObject { ) do { - let result = try await editEmployeeUseCase.execute(employee: updatedEmployee, workspace: "AGENCY") + let result = try await editEmployeeUseCase.execute(employee: updatedEmployee, role: "AGENCY") uiState = uiState.copy( employee: result, isLoading: false, diff --git a/SampoomManagement/Features/User/UI/EmployeeListViewModel.swift b/SampoomManagement/Features/User/UI/EmployeeListViewModel.swift index 5a64bbe..a3f384e 100644 --- a/SampoomManagement/Features/User/UI/EmployeeListViewModel.swift +++ b/SampoomManagement/Features/User/UI/EmployeeListViewModel.swift @@ -88,7 +88,7 @@ class EmployeeListViewModel: ObservableObject { do { let result = try await getEmployeeUseCase.execute( - workspace: "AGENCY", + role: "AGENCY", organizationId: user.agencyId, page: page, size: 20 diff --git a/SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift b/SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift index c80df1d..07ea8b2 100644 --- a/SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift +++ b/SampoomManagement/Features/User/UI/UpdateEmployeeStatusViewModel.swift @@ -65,7 +65,6 @@ class UpdateEmployeeStatusViewModel: ObservableObject { email: currentEmployee.email, role: currentEmployee.role, userName: currentEmployee.userName, - workspace: currentEmployee.workspace, organizationId: currentEmployee.organizationId, branch: currentEmployee.branch, position: currentEmployee.position, @@ -77,7 +76,7 @@ class UpdateEmployeeStatusViewModel: ObservableObject { ) do { - let result = try await updateEmployeeStatusUseCase.execute(employee: updatedEmployee, workspace: "AGENCY") + let result = try await updateEmployeeStatusUseCase.execute(employee: updatedEmployee, role: "AGENCY") uiState = uiState.copy( employee: result, isLoading: false, diff --git a/SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift b/SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift index 040bae0..42c3563 100644 --- a/SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift +++ b/SampoomManagement/Features/User/UI/UpdateProfileViewModel.swift @@ -61,7 +61,6 @@ class UpdateProfileViewModel: ObservableObject { refreshToken: currentUser.refreshToken, expiresIn: currentUser.expiresIn, position: currentUser.position, - workspace: currentUser.workspace, branch: currentUser.branch, agencyId: currentUser.agencyId, startedAt: currentUser.startedAt,