From 6a61ffb1caf1c65e24a27704f29b5159aea74593 Mon Sep 17 00:00:00 2001 From: "adel.kalimullin" Date: Mon, 9 Jun 2025 15:53:04 +0300 Subject: [PATCH] SUPPORT-9212: fixes --- .../model/idm/AccountData.java | 6 +++--- .../model/idm/AccountRoleData.java | 16 +++++++++++++--- .../model/idm/RoleData.java | 9 +++++++++ .../impl/AccountRoleDataProcessor.java | 18 ++++++++++-------- .../idm_reconcile/tables/AccountRole.java | 5 +++++ .../tables/records/AccountRoleRecord.java | 17 ++++++++++++++++- .../v_1.0/20250530-SUPPORT-9212_idmv3.xml | 2 ++ 7 files changed, 58 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/ervu_business_metrics/model/idm/AccountData.java b/backend/src/main/java/ervu_business_metrics/model/idm/AccountData.java index 9584ec1..5d3e887 100644 --- a/backend/src/main/java/ervu_business_metrics/model/idm/AccountData.java +++ b/backend/src/main/java/ervu_business_metrics/model/idm/AccountData.java @@ -26,7 +26,7 @@ public class AccountData { private int version; private ReferenceEntity domain; private ReferenceEntity person; - private List roles; + private List roles; public String getId() { return id; @@ -132,11 +132,11 @@ public class AccountData { this.person = person; } - public List getRoles() { + public List getRoles() { return roles; } - public void setRoles(List roles) { + public void setRoles(List roles) { this.roles = roles; } } diff --git a/backend/src/main/java/ervu_business_metrics/model/idm/AccountRoleData.java b/backend/src/main/java/ervu_business_metrics/model/idm/AccountRoleData.java index c9d3c00..5a54f83 100644 --- a/backend/src/main/java/ervu_business_metrics/model/idm/AccountRoleData.java +++ b/backend/src/main/java/ervu_business_metrics/model/idm/AccountRoleData.java @@ -8,14 +8,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonIgnoreProperties(ignoreUnknown = true) public class AccountRoleData { - @JsonProperty("sub") + @JsonProperty("id_account") private String id; - @JsonProperty("id") + @JsonProperty("id_role") private String roleId; + private long finish; - public AccountRoleData(String id, String roleId) { + public AccountRoleData(String id, String roleId, long finish) { this.id = id; this.roleId = roleId; + this.finish = finish; } public AccountRoleData() { @@ -36,4 +38,12 @@ public class AccountRoleData { public void setRoleId(String roleId) { this.roleId = roleId; } + + public long getFinish() { + return finish; + } + + public void setFinish(long finish) { + this.finish = finish; + } } diff --git a/backend/src/main/java/ervu_business_metrics/model/idm/RoleData.java b/backend/src/main/java/ervu_business_metrics/model/idm/RoleData.java index 1d46fe5..9718328 100644 --- a/backend/src/main/java/ervu_business_metrics/model/idm/RoleData.java +++ b/backend/src/main/java/ervu_business_metrics/model/idm/RoleData.java @@ -16,6 +16,7 @@ public class RoleData { private long modified; private long deleted; private int version; + private long finish; public String getId() { return id; @@ -88,4 +89,12 @@ public class RoleData { public void setVersion(int version) { this.version = version; } + + public long getFinish() { + return finish; + } + + public void setFinish(long finish) { + this.finish = finish; + } } 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 c3cec0e..0e95c69 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 @@ -6,9 +6,9 @@ import java.util.Set; import java.util.stream.Collectors; import ervu_business_metrics.dao.AccountRoleDataDao; -import ervu_business_metrics.model.ReferenceEntity; import ervu_business_metrics.model.idm.AccountData; import ervu_business_metrics.model.idm.AccountRoleData; +import ervu_business_metrics.model.idm.RoleData; import ervu_business_metrics.service.processor.LinkDataProcessor; import org.springframework.stereotype.Component; import ru.micord.webbpm.ervu.business_metrics.db_beans.idm_reconcile.tables.records.AccountRoleRecord; @@ -46,6 +46,7 @@ public class AccountRoleDataProcessor AccountRoleRecord accountRoleRecord = dao.newRecord(); accountRoleRecord.setAccountId(data.getId()); accountRoleRecord.setRoleId(data.getRoleId()); + accountRoleRecord.setFinish(data.getFinish()); return accountRoleRecord; } @@ -57,9 +58,8 @@ public class AccountRoleDataProcessor List existingRoleIds = dao.getRoleIdsByAccountId(accountId); Set incomingRoleIds = account.getRoles() == null ? Set.of() - : account.getRoles() - .stream() - .map(ReferenceEntity::getId) + : account.getRoles().stream() + .map(RoleData::getId) .collect(Collectors.toSet()); List toDelete = existingRoleIds.stream() @@ -70,13 +70,15 @@ public class AccountRoleDataProcessor dao.deleteAccountRolesByAccountIdAndRoleIds(accountId, toDelete); } - List toAdd = incomingRoleIds.stream() - .filter(roleId -> !existingRoleIds.contains(roleId)) - .toList(); + List toAdd = account.getRoles() == null + ? List.of() + : account.getRoles().stream() + .filter(role -> !existingRoleIds.contains(role.getId())) + .toList(); if (!toAdd.isEmpty()) { List newRecords = toAdd.stream() - .map(roleId -> mapToRecord(new AccountRoleData(accountId, roleId))) + .map(role -> mapToRecord(new AccountRoleData(accountId, role.getId(), role.getFinish()))) .toList(); accountRoleRecords.addAll(newRecords); } diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/AccountRole.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/AccountRole.java index eff9791..b7d8df9 100644 --- a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/AccountRole.java +++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/AccountRole.java @@ -61,6 +61,11 @@ public class AccountRole extends TableImpl { */ public final TableField ROLE_ID = createField(DSL.name("role_id"), SQLDataType.VARCHAR(36).nullable(false), this, "Уникальный идентификатор роли"); + /** + * The column idm_reconcile.account_role.finish. + */ + public final TableField FINISH = createField(DSL.name("finish"), SQLDataType.BIGINT.nullable(false), this, ""); + private AccountRole(Name alias, Table aliased) { this(alias, aliased, (Field[]) null, null); } diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/records/AccountRoleRecord.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/records/AccountRoleRecord.java index c10d55b..39ae4d9 100644 --- a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/records/AccountRoleRecord.java +++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/idm_reconcile/tables/records/AccountRoleRecord.java @@ -50,6 +50,20 @@ public class AccountRoleRecord extends UpdatableRecordImpl { return (String) get(1); } + /** + * Setter for idm_reconcile.account_role.finish. + */ + public void setFinish(Long value) { + set(2, value); + } + + /** + * Getter for idm_reconcile.account_role.finish. + */ + public Long getFinish() { + return (Long) get(2); + } + // ------------------------------------------------------------------------- // Primary key information // ------------------------------------------------------------------------- @@ -73,11 +87,12 @@ public class AccountRoleRecord extends UpdatableRecordImpl { /** * Create a detached, initialised AccountRoleRecord */ - public AccountRoleRecord(String accountId, String roleId) { + public AccountRoleRecord(String accountId, String roleId, Long finish) { super(AccountRole.ACCOUNT_ROLE); setAccountId(accountId); setRoleId(roleId); + setFinish(finish); resetChangedOnNotNull(); } } diff --git a/backend/src/main/resources/config/v_1.0/20250530-SUPPORT-9212_idmv3.xml b/backend/src/main/resources/config/v_1.0/20250530-SUPPORT-9212_idmv3.xml index 1889412..54f32f4 100644 --- a/backend/src/main/resources/config/v_1.0/20250530-SUPPORT-9212_idmv3.xml +++ b/backend/src/main/resources/config/v_1.0/20250530-SUPPORT-9212_idmv3.xml @@ -146,6 +146,7 @@ CREATE TABLE IF NOT EXISTS idm_reconcile.account_role ( account_id varchar(36) NOT NULL, role_id varchar(36) NOT NULL, + finish bigint NOT NULL, CONSTRAINT pk_account_role PRIMARY KEY (account_id, role_id)); ALTER TABLE idm_reconcile.account_role OWNER TO ervu_business_metrics; @@ -153,6 +154,7 @@ COMMENT ON TABLE idm_reconcile.account_role IS 'Связующая таблица для связи многие ко многим между аккаунтами и ролями'; COMMENT ON COLUMN idm_reconcile.account_role.account_id IS 'Уникальный идентификатор аккаунта'; COMMENT ON COLUMN idm_reconcile.account_role.role_id IS 'Уникальный идентификатор роли'; + COMMENT ON COLUMN idm_reconcile.account_role.finish IS 'Время окончания роли для аккаунта';