Merge pull request #9558 from YevhenBondarenko/fix/alarm-assign
fixed getUsersForAssign if originator was removed
This commit is contained in:
		
						commit
						520a203d27
					
				@ -105,6 +105,7 @@ import static org.thingsboard.server.controller.ControllerConstants.USER_ID_PARA
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.USER_SORT_PROPERTY_ALLOWABLE_VALUES;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.USER_TEXT_SEARCH_DESCRIPTION;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LINK;
 | 
			
		||||
import static org.thingsboard.server.dao.entity.BaseEntityService.NULL_CUSTOMER_ID;
 | 
			
		||||
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
@RestController
 | 
			
		||||
@ -439,32 +440,28 @@ public class UserController extends BaseController {
 | 
			
		||||
            @RequestParam(required = false) String sortProperty,
 | 
			
		||||
            @ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
 | 
			
		||||
            @RequestParam(required = false) String sortOrder) throws ThingsboardException {
 | 
			
		||||
        try {
 | 
			
		||||
            checkParameter("alarmId", strAlarmId);
 | 
			
		||||
            AlarmId alarmEntityId = new AlarmId(toUUID(strAlarmId));
 | 
			
		||||
            Alarm alarm = checkAlarmId(alarmEntityId, Operation.READ);
 | 
			
		||||
            SecurityUser currentUser = getCurrentUser();
 | 
			
		||||
            TenantId tenantId = currentUser.getTenantId();
 | 
			
		||||
            CustomerId originatorCustomerId = entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).get();
 | 
			
		||||
            PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
 | 
			
		||||
            PageData<User> pageData;
 | 
			
		||||
            if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) {
 | 
			
		||||
                if (alarm.getCustomerId() == null) {
 | 
			
		||||
                    pageData = userService.findTenantAdmins(tenantId, pageLink);
 | 
			
		||||
                } else {
 | 
			
		||||
                    ArrayList<CustomerId> customerIds = new ArrayList<>(Collections.singletonList(new CustomerId(CustomerId.NULL_UUID)));
 | 
			
		||||
                    if (!CustomerId.NULL_UUID.equals(originatorCustomerId.getId())) {
 | 
			
		||||
                        customerIds.add(originatorCustomerId);
 | 
			
		||||
                    }
 | 
			
		||||
                    pageData = userService.findUsersByCustomerIds(tenantId, customerIds, pageLink);
 | 
			
		||||
                }
 | 
			
		||||
        checkParameter("alarmId", strAlarmId);
 | 
			
		||||
        AlarmId alarmEntityId = new AlarmId(toUUID(strAlarmId));
 | 
			
		||||
        Alarm alarm = checkAlarmId(alarmEntityId, Operation.READ);
 | 
			
		||||
        SecurityUser currentUser = getCurrentUser();
 | 
			
		||||
        TenantId tenantId = currentUser.getTenantId();
 | 
			
		||||
        CustomerId originatorCustomerId = entityService.fetchEntityCustomerId(tenantId, alarm.getOriginator()).orElse(NULL_CUSTOMER_ID);
 | 
			
		||||
        PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
 | 
			
		||||
        PageData<User> pageData;
 | 
			
		||||
        if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) {
 | 
			
		||||
            if (alarm.getCustomerId() == null) {
 | 
			
		||||
                pageData = userService.findTenantAdmins(tenantId, pageLink);
 | 
			
		||||
            } else {
 | 
			
		||||
                pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
 | 
			
		||||
                ArrayList<CustomerId> customerIds = new ArrayList<>(Collections.singletonList(NULL_CUSTOMER_ID));
 | 
			
		||||
                if (!CustomerId.NULL_UUID.equals(originatorCustomerId.getId())) {
 | 
			
		||||
                    customerIds.add(originatorCustomerId);
 | 
			
		||||
                }
 | 
			
		||||
                pageData = userService.findUsersByCustomerIds(tenantId, customerIds, pageLink);
 | 
			
		||||
            }
 | 
			
		||||
            return pageData.mapData(user -> new UserEmailInfo(user.getId(), user.getEmail(), user.getFirstName(), user.getLastName()));
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        } else {
 | 
			
		||||
            pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
 | 
			
		||||
        }
 | 
			
		||||
        return pageData.mapData(user -> new UserEmailInfo(user.getId(), user.getEmail(), user.getFirstName(), user.getLastName()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Save user settings (saveUserSettings)",
 | 
			
		||||
 | 
			
		||||
@ -49,6 +49,7 @@ import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.security.Authority;
 | 
			
		||||
import org.thingsboard.server.common.data.settings.StarredDashboardInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.settings.UserDashboardsInfo;
 | 
			
		||||
import org.thingsboard.server.dao.device.DeviceService;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
			
		||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
			
		||||
import org.thingsboard.server.dao.user.UserDao;
 | 
			
		||||
@ -81,6 +82,9 @@ public class UserControllerTest extends AbstractControllerTest {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private UserDao userDao;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private DeviceService deviceService;
 | 
			
		||||
 | 
			
		||||
    static class Config {
 | 
			
		||||
        @Bean
 | 
			
		||||
        @Primary
 | 
			
		||||
@ -740,6 +744,43 @@ public class UserControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(expectedCustomerUserIds, loadedUserIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetUsersForDeletedAlarmOriginator() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
 | 
			
		||||
        String email = "testEmail1";
 | 
			
		||||
        for (int i = 0; i < 45; i++) {
 | 
			
		||||
            User customerUser = createCustomerUser( customerId);
 | 
			
		||||
            customerUser.setEmail(email + StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10)) + "@thingsboard.org");
 | 
			
		||||
            doPost("/api/user", customerUser, User.class);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Device device = new Device();
 | 
			
		||||
        device.setName("testDevice");
 | 
			
		||||
        device.setCustomerId(customerId);
 | 
			
		||||
        Device savedDevice = doPost("/api/device", device, Device.class);
 | 
			
		||||
 | 
			
		||||
        Alarm alarm = createTestAlarm(savedDevice);
 | 
			
		||||
 | 
			
		||||
        deviceService.deleteDevice(tenantId, savedDevice.getId());
 | 
			
		||||
 | 
			
		||||
        List<UserId> loadedUserIds = new ArrayList<>();
 | 
			
		||||
        PageLink pageLink = new PageLink(33, 0);
 | 
			
		||||
        PageData<UserEmailInfo> pageData;
 | 
			
		||||
        do {
 | 
			
		||||
            pageData = doGetTypedWithPageLink("/api/users/assign/" + alarm.getId().getId().toString() + "?",
 | 
			
		||||
                    new TypeReference<>() {}, pageLink);
 | 
			
		||||
            loadedUserIds.addAll(pageData.getData().stream().map(UserEmailInfo::getId)
 | 
			
		||||
                    .collect(Collectors.toList()));
 | 
			
		||||
            if (pageData.hasNext()) {
 | 
			
		||||
                pageLink = pageLink.nextPageLink();
 | 
			
		||||
            }
 | 
			
		||||
        } while (pageData.hasNext());
 | 
			
		||||
 | 
			
		||||
        Assert.assertEquals(1, loadedUserIds.size());
 | 
			
		||||
        Assert.assertEquals(tenantAdminUserId, loadedUserIds.get(0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteUserWithDeleteRelationsOk() throws Exception {
 | 
			
		||||
        loginSysAdmin();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user