diff --git a/app/Services/Sales/SalesManagerService.php b/app/Services/Sales/SalesManagerService.php index 270b9d6e..c4990773 100644 --- a/app/Services/Sales/SalesManagerService.php +++ b/app/Services/Sales/SalesManagerService.php @@ -273,24 +273,44 @@ private function assignSalesDepartment(User $user, int $tenantId): void */ public function syncRoles(User $user, int $tenantId, array $roleIds): void { - // 영업 관련 역할만 삭제 (다른 역할은 유지) + // 영업 관련 역할만 처리 (다른 역할은 유지) $salesRoleIds = Role::where('tenant_id', $tenantId) ->whereIn('name', self::SALES_ROLES) - ->pluck('id'); + ->pluck('id') + ->toArray(); - UserRole::where('user_id', $user->id) - ->where('tenant_id', $tenantId) - ->whereIn('role_id', $salesRoleIds) - ->delete(); + // 제거할 역할 soft delete (새 역할 목록에 없는 것들) + $roleIdsToRemove = array_diff($salesRoleIds, $roleIds); + if (!empty($roleIdsToRemove)) { + UserRole::where('user_id', $user->id) + ->where('tenant_id', $tenantId) + ->whereIn('role_id', $roleIdsToRemove) + ->delete(); + } - // 새 역할 추가 + // 새 역할 추가 (이미 있으면 복원, 없으면 생성) foreach ($roleIds as $roleId) { - UserRole::create([ - 'user_id' => $user->id, - 'tenant_id' => $tenantId, - 'role_id' => $roleId, - 'assigned_at' => now(), - ]); + // soft delete된 레코드 포함하여 검색 + $existingRole = UserRole::withTrashed() + ->where('user_id', $user->id) + ->where('tenant_id', $tenantId) + ->where('role_id', $roleId) + ->first(); + + if ($existingRole) { + // 이미 존재하면 복원 (soft delete된 경우) + if ($existingRole->trashed()) { + $existingRole->restore(); + } + } else { + // 새로 생성 + UserRole::create([ + 'user_id' => $user->id, + 'tenant_id' => $tenantId, + 'role_id' => $roleId, + 'assigned_at' => now(), + ]); + } } }