Improved user search in the relation rule node

This commit is contained in:
Andrii Shvaika 2022-10-31 16:13:06 +02:00
parent d0179c4cd3
commit 18678cae49
6 changed files with 30 additions and 1 deletions

View File

@ -33,6 +33,8 @@ public interface UserService {
User findUserByEmail(TenantId tenantId, String email); User findUserByEmail(TenantId tenantId, String email);
User findUserByTenantIdAndEmail(TenantId tenantId, String email);
User saveUser(User user); User saveUser(User user);
UserCredentials findUserCredentialsByUserId(TenantId tenantId, UserId userId); UserCredentials findUserCredentialsByUserId(TenantId tenantId, UserId userId);

View File

@ -60,6 +60,11 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple
return DaoUtil.getData(userRepository.findByEmail(email)); return DaoUtil.getData(userRepository.findByEmail(email));
} }
@Override
public User findByTenantIdAndEmail(TenantId tenantId, String email) {
return DaoUtil.getData(userRepository.findByTenantIdAndEmail(tenantId.getId(), email));
}
@Override @Override
public PageData<User> findByTenantId(UUID tenantId, PageLink pageLink) { public PageData<User> findByTenantId(UUID tenantId, PageLink pageLink) {
return DaoUtil.toPageData( return DaoUtil.toPageData(

View File

@ -20,6 +20,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.dao.model.sql.UserEntity; import org.thingsboard.server.dao.model.sql.UserEntity;
@ -32,6 +33,8 @@ public interface UserRepository extends JpaRepository<UserEntity, UUID> {
UserEntity findByEmail(String email); UserEntity findByEmail(String email);
UserEntity findByTenantIdAndEmail(UUID tenantId, String email);
@Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " + @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " +
"AND u.customerId = :customerId AND u.authority = :authority " + "AND u.customerId = :customerId AND u.authority = :authority " +
"AND LOWER(u.searchText) LIKE LOWER(CONCAT('%', :searchText, '%'))") "AND LOWER(u.searchText) LIKE LOWER(CONCAT('%', :searchText, '%'))")
@ -48,4 +51,5 @@ public interface UserRepository extends JpaRepository<UserEntity, UUID> {
Pageable pageable); Pageable pageable);
Long countByTenantId(UUID tenantId); Long countByTenantId(UUID tenantId);
} }

View File

@ -42,6 +42,15 @@ public interface UserDao extends Dao<User>, TenantEntityDao {
*/ */
User findByEmail(TenantId tenantId, String email); User findByEmail(TenantId tenantId, String email);
/**
* Find user by tenant id and email.
*
* @param tenantId the tenant id
* @param email the email
* @return the user entity
*/
User findByTenantIdAndEmail(TenantId tenantId, String email);
/** /**
* Find users by tenantId and page link. * Find users by tenantId and page link.
* *
@ -69,4 +78,5 @@ public interface UserDao extends Dao<User>, TenantEntityDao {
* @return the list of user entities * @return the list of user entities
*/ */
PageData<User> findCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink); PageData<User> findCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink);
} }

View File

@ -87,6 +87,14 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
} }
} }
@Override
public User findUserByTenantIdAndEmail(TenantId tenantId, String email) {
log.trace("Executing findUserByTenantIdAndEmail [{}][{}]", tenantId, email);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
validateString(email, "Incorrect email " + email);
return userDao.findByTenantIdAndEmail(tenantId, email);
}
@Override @Override
public User findUserById(TenantId tenantId, UserId userId) { public User findUserById(TenantId tenantId, UserId userId) {
log.trace("Executing findUserById [{}]", userId); log.trace("Executing findUserById [{}]", userId);

View File

@ -258,7 +258,7 @@ public abstract class TbAbstractRelationActionNode<C extends TbAbstractRelationA
break; break;
case USER: case USER:
UserService userService = ctx.getUserService(); UserService userService = ctx.getUserService();
User user = userService.findUserByEmail(ctx.getTenantId(), entitykey.getEntityName()); User user = userService.findUserByTenantIdAndEmail(ctx.getTenantId(), entitykey.getEntityName());
if (user != null) { if (user != null) {
targetEntity.setEntityId(user.getId()); targetEntity.setEntityId(user.getId());
} }