From e0c6544e6ce549c29496dc43c7934334d63b687e Mon Sep 17 00:00:00 2001 From: "adel.kalimullin" Date: Mon, 9 Jun 2025 15:02:00 +0300 Subject: [PATCH] SUPPORT-9212: fix --- .../dao/AbstractDataDao.java | 6 +++-- .../dao/AccountDataDao.java | 3 ++- .../dao/AccountRoleDataDao.java | 3 ++- .../processor/impl/AccountDataProcessor.java | 2 +- .../impl/AccountRoleDataProcessor.java | 25 +++++++++++-------- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/ervu_business_metrics/dao/AbstractDataDao.java b/backend/src/main/java/ervu_business_metrics/dao/AbstractDataDao.java index 1392d63..9e41f37 100644 --- a/backend/src/main/java/ervu_business_metrics/dao/AbstractDataDao.java +++ b/backend/src/main/java/ervu_business_metrics/dao/AbstractDataDao.java @@ -2,6 +2,7 @@ package ervu_business_metrics.dao; import java.util.List; import java.util.Map; +import java.util.Set; import org.jooq.*; import org.jooq.impl.DSL; @@ -54,12 +55,12 @@ public abstract class AbstractDataDao> { .execute(); } - protected List getValuesByField(Field selectField, Field filterField, + protected Set getValuesByField(Field selectField, Field filterField, F filterValue) { return dsl.select(selectField) .from(getTable()) .where(filterField.eq(filterValue)) - .fetch(selectField); + .fetchSet(selectField); } public void setActiveStatus(String id, boolean isActive) { @@ -79,4 +80,5 @@ public abstract class AbstractDataDao> { public void mergeRecords(List records) { dsl.batchMerge(records).execute(); } + } \ No newline at end of file diff --git a/backend/src/main/java/ervu_business_metrics/dao/AccountDataDao.java b/backend/src/main/java/ervu_business_metrics/dao/AccountDataDao.java index d25979b..a28269b 100644 --- a/backend/src/main/java/ervu_business_metrics/dao/AccountDataDao.java +++ b/backend/src/main/java/ervu_business_metrics/dao/AccountDataDao.java @@ -1,6 +1,7 @@ package ervu_business_metrics.dao; import java.util.List; +import java.util.Set; import org.jooq.DSLContext; import org.jooq.Table; @@ -19,7 +20,7 @@ public class AccountDataDao extends AbstractDataDao { super(dsl); } - public List getAccountIdsByPersonId(String personId) { + public Set getAccountIdsByPersonId(String personId) { return getValuesByField(Tables.ACCOUNT.ID, Tables.ACCOUNT.PERSON_ID, personId); } diff --git a/backend/src/main/java/ervu_business_metrics/dao/AccountRoleDataDao.java b/backend/src/main/java/ervu_business_metrics/dao/AccountRoleDataDao.java index 4e024a5..80db8b3 100644 --- a/backend/src/main/java/ervu_business_metrics/dao/AccountRoleDataDao.java +++ b/backend/src/main/java/ervu_business_metrics/dao/AccountRoleDataDao.java @@ -3,6 +3,7 @@ package ervu_business_metrics.dao; import java.util.List; import java.util.Map; +import java.util.Set; import org.jooq.DSLContext; import org.jooq.Field; @@ -22,7 +23,7 @@ public class AccountRoleDataDao extends AbstractDataDao { super(dsl); } - public List getRoleIdsByAccountId(String accountId) { + public Set getRoleIdsByAccountId(String accountId) { return getValuesByField(Tables.ACCOUNT_ROLE.ROLE_ID, Tables.ACCOUNT_ROLE.ACCOUNT_ID, accountId); } diff --git a/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountDataProcessor.java b/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountDataProcessor.java index 5d2a8cd..4574143 100644 --- a/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountDataProcessor.java +++ b/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountDataProcessor.java @@ -84,7 +84,7 @@ public class AccountDataProcessor implements DataProcessor incomingAccountIds) { - List existingAccountIds = dao.getAccountIdsByPersonId(personId); + Set existingAccountIds = dao.getAccountIdsByPersonId(personId); List toDelete = existingAccountIds.stream() .filter(id -> !incomingAccountIds.contains(id)) diff --git a/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountRoleDataProcessor.java b/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountRoleDataProcessor.java index 418e2ab..296be67 100644 --- a/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountRoleDataProcessor.java +++ b/backend/src/main/java/ervu_business_metrics/service/processor/impl/AccountRoleDataProcessor.java @@ -49,11 +49,11 @@ public class AccountRoleDataProcessor implements LinkDataProcessor accounts) { - List allRoleRecords = new ArrayList<>(); + List accountRoleRecords = new ArrayList<>(); for (AccountData account : accounts) { - List existingRoleIds = dao.getRoleIdsByAccountId(account.getId()); - + String accountId = account.getId(); + Set existingRoleIds = dao.getRoleIdsByAccountId(accountId); Set incomingRoleIds = account.getRoles() == null ? Set.of() : account.getRoles() @@ -66,18 +66,23 @@ public class AccountRoleDataProcessor implements LinkDataProcessor toAdd = incomingRoleIds.stream() + .filter(roleId -> !existingRoleIds.contains(roleId)) + .toList(); + + if (!toAdd.isEmpty()) { + List newRecords = toAdd.stream() + .map(roleId -> mapToRecord(new AccountRoleData(accountId, roleId))) + .toList(); + accountRoleRecords.addAll(newRecords); } } - if (!allRoleRecords.isEmpty()) { - dao.mergeRecords(allRoleRecords); + if (!accountRoleRecords.isEmpty()) { + dao.mergeRecords(accountRoleRecords); } }