From 76f74766fd2c57336f7392df4778f41809ccec77 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Wed, 1 Mar 2023 14:23:53 +0200 Subject: [PATCH] refactored upgrade to be executed with PostgreSQL --- .../main/data/upgrade/3.4.4/schema_update.sql | 8 ++++- .../install/SqlDatabaseUpgradeService.java | 31 ------------------- .../server/dao/user/UserService.java | 2 -- .../server/dao/sql/user/JpaUserDao.java | 7 ----- .../thingsboard/server/dao/user/UserDao.java | 8 ----- .../server/dao/user/UserServiceImpl.java | 7 ----- .../main/resources/sql/schema-entities.sql | 2 +- 7 files changed, 8 insertions(+), 57 deletions(-) diff --git a/application/src/main/data/upgrade/3.4.4/schema_update.sql b/application/src/main/data/upgrade/3.4.4/schema_update.sql index c8e5cbe4b4..858227dd5f 100644 --- a/application/src/main/data/upgrade/3.4.4/schema_update.sql +++ b/application/src/main/data/upgrade/3.4.4/schema_update.sql @@ -32,4 +32,10 @@ CREATE TABLE IF NOT EXISTS user_settings ( ); ALTER TABLE user_credentials - ADD COLUMN IF NOT EXISTS additional_info varchar DEFAULT '{}'; \ No newline at end of file + ADD COLUMN IF NOT EXISTS additional_info varchar DEFAULT '{}'; + +UPDATE user_credentials + SET additional_info = json_build_object('userPasswordHistory', (u.additional_info::json -> 'userPasswordHistory')) + FROM tb_user u WHERE user_credentials.user_id = u.id AND u.additional_info::jsonb ? 'userPasswordHistory'; + +UPDATE tb_user SET additional_info = tb_user.additional_info::jsonb - 'userPasswordHistory'; \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java index cbb51a9a3c..20e899aaad 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java @@ -116,9 +116,6 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService @Autowired private TenantService tenantService; - @Autowired - private UserService userService; - @Autowired private TenantRepository tenantRepository; @@ -710,34 +707,6 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService } catch (Exception e) { } - PageLink pageLink = new PageLink(1000); - PageData users; - do { - List> futures = new ArrayList<>(); - users = userService.findAllUsers(pageLink); - for (User user : users.getData()) { - futures.add(dbUpgradeExecutor.submit(() -> { - try { - log.info("Migrating password history for user: " + user.getId()); - JsonNode additionalInfo = user.getAdditionalInfo(); - if (additionalInfo != null && additionalInfo.has("userPasswordHistory")){ - UserCredentials creds = userService.findUserCredentialsByUserId(user.getTenantId(), user.getId()); - if (creds != null) { - creds.setAdditionalInfo(JacksonUtil.newObjectNode().set("userPasswordHistory", additionalInfo.get("userPasswordHistory"))); - userService.saveUserCredentials(user.getTenantId(), creds); - } - ((ObjectNode) additionalInfo).remove("userPasswordHistory"); - userService.saveUser(user); - } - } catch (Exception e){ - log.error("Failed to migrate password history for user: " + user.getId(), e); - } - })); - } - Futures.allAsList(futures).get(); - pageLink = pageLink.nextPageLink(); - } while (users.hasNext()); - conn.createStatement().execute("UPDATE tb_schema_settings SET schema_version = 3005000;"); } log.info("Schema updated."); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java index a981292d82..bb40507772 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java @@ -58,8 +58,6 @@ public interface UserService extends EntityDaoService { PageData findUsersByTenantId(TenantId tenantId, PageLink pageLink); - PageData findAllUsers(PageLink pageLink); - PageData findTenantAdmins(TenantId tenantId, PageLink pageLink); void deleteTenantAdmins(TenantId tenantId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java index 34386132da..473c145b5d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java @@ -75,13 +75,6 @@ public class JpaUserDao extends JpaAbstractSearchTextDao imple DaoUtil.toPageable(pageLink))); } - @Override - public PageData findAll(PageLink pageLink) { - return DaoUtil.toPageData( - userRepository - .findAll(DaoUtil.toPageable(pageLink))); - } - @Override public PageData findTenantAdmins(UUID tenantId, PageLink pageLink) { return DaoUtil.toPageData( diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java index 456676664e..c2551c84d3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java @@ -60,14 +60,6 @@ public interface UserDao extends Dao, TenantEntityDao { */ PageData findByTenantId(UUID tenantId, PageLink pageLink); - /** - * Find users by page link. - * - * @param pageLink the page link - * @return the list of user entities - */ - PageData findAll(PageLink pageLink); - /** * Find tenant admin users by tenantId and page link. * diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java index ea6b96d910..12265d526c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java @@ -240,13 +240,6 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic return userDao.findByTenantId(tenantId.getId(), pageLink); } - @Override - public PageData findAllUsers(PageLink pageLink) { - log.trace("Executing findAllUsers, pageLink [{}]", pageLink); - validatePageLink(pageLink); - return userDao.findAll(pageLink); - } - @Override public PageData findTenantAdmins(TenantId tenantId, PageLink pageLink) { log.trace("Executing findTenantAdmins, tenantId [{}], pageLink [{}]", tenantId, pageLink); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 8c47b46aff..6cdf431ce0 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -488,7 +488,7 @@ CREATE TABLE IF NOT EXISTS user_credentials ( password varchar(255), reset_token varchar(255) UNIQUE, user_id uuid UNIQUE, - additional_info varchar + additional_info varchar DEFAULT '{}' ); CREATE TABLE IF NOT EXISTS widget_type (