From ffb73060fcd225db97a6db1960fc92af92b289b8 Mon Sep 17 00:00:00 2001 From: ilyin Date: Tue, 15 Apr 2025 15:19:38 +0300 Subject: [PATCH 01/25] SUPPORT-9099_2 --- .../Обработка заявки на добавление пользователя.page | 17 +++++++------ .../Обработка заявки на изменение пользователя.page | 24 ++++++++----------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page index 96e4a0fc..d3004ac7 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page @@ -2376,6 +2376,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + @@ -4790,6 +4794,12 @@ gridService + + dependencyLink + + {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"user_application_list_id"} + + loadDao @@ -4921,13 +4931,6 @@ true true - - 16071adb-3bdf-4c33-b29b-886876016415 - 6ee95a07-1f65-4848-afe7-b6788502fb6b - Grid - true - true - f9a38417-9ad0-412a-9b5f-bbeb450dddd6 27764b05-3a3e-4bed-b1dd-d032f990240d diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page index 3f0d51e2..73807204 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page @@ -859,6 +859,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + @@ -3354,13 +3358,6 @@ true true - - 16071adb-3bdf-4c33-b29b-886876016415 - 6ee95a07-1f65-4848-afe7-b6788502fb6b - Grid - true - true - f9a38417-9ad0-412a-9b5f-bbeb450dddd6 27764b05-3a3e-4bed-b1dd-d032f990240d @@ -7623,6 +7620,12 @@ gridService + + dependencyLink + + {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"user_application_list_id"} + + loadDao @@ -7761,13 +7764,6 @@ false true - - 16071adb-3bdf-4c33-b29b-886876016415 - 7374e6df-effc-4ec4-bfaf-ab0c1073bd7e - Grid - true - true - 312c9663-86b4-4672-97bd-67d313585c00 b838c4d9-b8f2-4142-96fe-240540a4802e From 1dbae63971186dd1390224cec99c8871cb49c615 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 15 Apr 2025 15:34:55 +0300 Subject: [PATCH 02/25] SUPPORT-9099: Add pk --- .../component/service/AuditFormDaoImpl.java | 1 - .../db_beans/public_/Keys.java | 3 +++ .../public_/tables/UserApplicationListAudit.java | 7 +++++++ .../records/UserApplicationListAuditRecord.java | 14 ++++++++++++-- .../config/v_1.0/20250415_SUPPORT-9099_add_pk.xml | 15 +++++++++++++++ .../main/resources/config/v_1.0/changelog-1.0.xml | 1 + 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/resources/config/v_1.0/20250415_SUPPORT-9099_add_pk.xml diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java index 3ebe7b0b..648b3e9b 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java @@ -5,7 +5,6 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.atomic.AtomicReference; import dao.container.FormDaoImpl; import org.springframework.beans.factory.annotation.Autowired; diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Keys.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Keys.java index 34f19f5f..495c04c9 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Keys.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Keys.java @@ -20,6 +20,7 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.Recruitment; import ru.micord.ervu.account_applications.db_beans.public_.tables.Shedlock; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationDocument; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationList; +import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationRole; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.DatabasechangeloglockRecord; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.JobPositionRecord; @@ -30,6 +31,7 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.records.LinkU import ru.micord.ervu.account_applications.db_beans.public_.tables.records.RecruitmentRecord; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.ShedlockRecord; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationDocumentRecord; +import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationListAuditRecord; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationListRecord; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationRoleRecord; @@ -60,6 +62,7 @@ public class Keys { public static final UniqueKey SHEDLOCK_PK = Internal.createUniqueKey(Shedlock.SHEDLOCK, DSL.name("shedlock_pk"), new TableField[] { Shedlock.SHEDLOCK.NAME }, true); public static final UniqueKey PK_USER_APPLICATION_DOCUMENT = Internal.createUniqueKey(UserApplicationDocument.USER_APPLICATION_DOCUMENT, DSL.name("pk_user_application_document"), new TableField[] { UserApplicationDocument.USER_APPLICATION_DOCUMENT.USER_APPLICATION_DOCUMENT_ID }, true); public static final UniqueKey PK_USER_APPLICATION_LIST = Internal.createUniqueKey(UserApplicationList.USER_APPLICATION_LIST, DSL.name("pk_user_application_list"), new TableField[] { UserApplicationList.USER_APPLICATION_LIST.USER_APPLICATION_LIST_ID }, true); + public static final UniqueKey USER_APPLICATION_LIST_AUDIT_PKEY = Internal.createUniqueKey(UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT, DSL.name("user_application_list_audit_pkey"), new TableField[] { UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT.ID }, true); public static final UniqueKey USER_APPLICATION_ROLE_PKEY = Internal.createUniqueKey(UserApplicationRole.USER_APPLICATION_ROLE, DSL.name("user_application_role_pkey"), new TableField[] { UserApplicationRole.USER_APPLICATION_ROLE.USER_ROLE_ID }, true); public static final UniqueKey USER_APPLICATION_ROLE_ROLE_NAME_KEY = Internal.createUniqueKey(UserApplicationRole.USER_APPLICATION_ROLE, DSL.name("user_application_role_role_name_key"), new TableField[] { UserApplicationRole.USER_APPLICATION_ROLE.ROLE_NAME }, true); diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java index 97b4e5b5..0bbf8cf4 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java @@ -21,10 +21,12 @@ import org.jooq.Stringly; import org.jooq.Table; import org.jooq.TableField; import org.jooq.TableOptions; +import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; +import ru.micord.ervu.account_applications.db_beans.public_.Keys; import ru.micord.ervu.account_applications.db_beans.public_.Public; import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationListAuditRecord; @@ -122,6 +124,11 @@ public class UserApplicationListAudit extends TableImpl) super.getIdentity(); } + @Override + public UniqueKey getPrimaryKey() { + return Keys.USER_APPLICATION_LIST_AUDIT_PKEY; + } + @Override public UserApplicationListAudit as(String alias) { return new UserApplicationListAudit(DSL.name(alias), this); diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java index a51eb638..c2b9dd66 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java @@ -7,7 +7,8 @@ package ru.micord.ervu.account_applications.db_beans.public_.tables.records; import java.sql.Timestamp; import java.util.UUID; -import org.jooq.impl.TableRecordImpl; +import org.jooq.Record1; +import org.jooq.impl.UpdatableRecordImpl; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit; @@ -16,7 +17,7 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicati * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class UserApplicationListAuditRecord extends TableRecordImpl { +public class UserApplicationListAuditRecord extends UpdatableRecordImpl { private static final long serialVersionUID = 1L; @@ -106,6 +107,15 @@ public class UserApplicationListAuditRecord extends TableRecordImpl key() { + return (Record1) super.key(); + } + // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- diff --git a/backend/src/main/resources/config/v_1.0/20250415_SUPPORT-9099_add_pk.xml b/backend/src/main/resources/config/v_1.0/20250415_SUPPORT-9099_add_pk.xml new file mode 100644 index 00000000..5a8e847c --- /dev/null +++ b/backend/src/main/resources/config/v_1.0/20250415_SUPPORT-9099_add_pk.xml @@ -0,0 +1,15 @@ + + + + + add pk audit table + + ALTER TABLE public.user_application_list_audit ADD PRIMARY KEY (id) + + + + \ No newline at end of file diff --git a/backend/src/main/resources/config/v_1.0/changelog-1.0.xml b/backend/src/main/resources/config/v_1.0/changelog-1.0.xml index ae5ac2e1..8a1382e4 100644 --- a/backend/src/main/resources/config/v_1.0/changelog-1.0.xml +++ b/backend/src/main/resources/config/v_1.0/changelog-1.0.xml @@ -21,4 +21,5 @@ + From e47cfab95be4b6ef5e010d5e3edaea07c5272abd Mon Sep 17 00:00:00 2001 From: ilyin Date: Tue, 15 Apr 2025 15:49:23 +0300 Subject: [PATCH 03/25] SUPPORT-9099_3 --- .../Обработка заявки на добавление пользователя.page | 9 +++++++++ .../Обработка заявки на изменение пользователя.page | 10 ++++++++++ .../Создать заявку на активацию.page | 4 ++++ .../Создать заявку на деактивацию.page | 4 ++++ .../Создать заявку на изменение.page | 12 ++++++++++++ .../Создать заявку на сброс пароля.page | 4 ++++ 6 files changed, 43 insertions(+) diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page index 9fcbe222..151d955f 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page @@ -4876,6 +4876,15 @@ {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"status"} + + formatter + + + EnumColumnFormatter + ru.micord.ervu.account_applications + + + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page index 7edd9a86..5cfbce13 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page @@ -3391,6 +3391,7 @@ 2ee6f91b-c4a2-461d-8428-c3a6a13c9244 hidden true + false false @@ -7701,6 +7702,15 @@ {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"status"} + + formatter + + + EnumColumnFormatter + ru.micord.ervu.account_applications + + + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page index 03c3b79d..575659ef 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page @@ -4914,6 +4914,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page index 65449409..bc307890 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page @@ -4915,6 +4915,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на изменение.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на изменение.page index e36d8a25..7e37ee07 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на изменение.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на изменение.page @@ -4866,6 +4866,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + @@ -9127,6 +9131,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + @@ -13439,6 +13447,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на сброс пароля.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на сброс пароля.page index f230104b..35c2d469 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на сброс пароля.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на сброс пароля.page @@ -4924,6 +4924,10 @@ + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + From ee0084102192b97497615b1146ca2dfacaf3c8c0 Mon Sep 17 00:00:00 2001 From: "adel.kalimullin" Date: Wed, 16 Apr 2025 14:17:20 +0300 Subject: [PATCH 04/25] SUPPORT-9116:add clear org from tree --- frontend/src/resources/css/components-autority.css | 4 ++++ .../component/field/DropdownTreeView.html | 2 +- .../component/field/DropdownTreeViewComponent.ts | 11 ++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/src/resources/css/components-autority.css b/frontend/src/resources/css/components-autority.css index 08c7356c..86cc4e50 100644 --- a/frontend/src/resources/css/components-autority.css +++ b/frontend/src/resources/css/components-autority.css @@ -300,6 +300,10 @@ .webbpm.account-applications dropdown-tree-view .bi-caret-right-fill::before { content: "\f4fd"; } +.webbpm.account-applications dropdown-tree-view :focus { + outline: none !important; + box-shadow: none !important; +} /* DropDownTree end */ .webbpm.account-applications .selectize-dropdown, diff --git a/frontend/src/resources/template/account_applications/component/field/DropdownTreeView.html b/frontend/src/resources/template/account_applications/component/field/DropdownTreeView.html index 5a07b640..f9060a91 100644 --- a/frontend/src/resources/template/account_applications/component/field/DropdownTreeView.html +++ b/frontend/src/resources/template/account_applications/component/field/DropdownTreeView.html @@ -4,7 +4,7 @@ [hidden]="!label" class="control-label"> {{label}} * -
+
Date: Wed, 16 Apr 2025 14:20:14 +0300 Subject: [PATCH 05/25] SUPPORT-9116:refactor --- .../component/field/DropdownTreeViewComponent.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/ts/account_applications/component/field/DropdownTreeViewComponent.ts b/frontend/src/ts/account_applications/component/field/DropdownTreeViewComponent.ts index 0d1a9bdd..c71d31ae 100644 --- a/frontend/src/ts/account_applications/component/field/DropdownTreeViewComponent.ts +++ b/frontend/src/ts/account_applications/component/field/DropdownTreeViewComponent.ts @@ -7,7 +7,8 @@ import { } from "@angular/core"; import { AdvancedProperty, - Event, EventUtils, + Event, + EventUtils, InputControl, LocalStorageService, NotNull, From 1d97152772deded060546d7522a225f58e3fbcea Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Thu, 17 Apr 2025 10:15:42 +0300 Subject: [PATCH 06/25] SUPPORT-9115: Fix --- .../kafka/ErvuDirectoriesListener.java | 20 +++++++++++++++++++ .../service/ErvuDirectoriesService.java | 10 +++++++++- ...java => ErvuDirectoriesUpdateService.java} | 18 ++++------------- config/micord.env | 4 ++++ 4 files changed, 37 insertions(+), 15 deletions(-) rename backend/src/main/java/ru/micord/ervu/account_applications/service/{ErvuDirectoriesUpdateShedulerService.java => ErvuDirectoriesUpdateService.java} (56%) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java index b29c5187..b61f7aed 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java @@ -23,4 +23,24 @@ public class ErvuDirectoriesListener { public void listenKafkaRole(String kafkaMessage) { ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); } +// Пока не заведены, обещают в будущих апдейтах создать +// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") + public void listenKafkaDomainUpdated(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") + public void listenKafkaDomainCreated(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); + } } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index cfc674f0..04e57fe0 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -42,6 +42,8 @@ public class ErvuDirectoriesService { private String idmUrl; @Value("${ervu.collection:domain, role}") private String ervuCollection; + @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") + private String ervuAdminRole; @Autowired private RestTemplate restTemplate; @Autowired @@ -58,7 +60,7 @@ public class ErvuDirectoriesService { try { String[] ervuCollectionArray = ervuCollection.split(","); Arrays.stream(ervuCollectionArray).forEach(ervuCollection -> { - String targetUrl = idmUrl + "/reconcile/"+ ervuCollection + "/to/kafka/v1"; + String targetUrl = idmUrl + "/reconcile/"+ ervuCollection.trim() + "/to/kafka/v1"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); String emptyJson = "{}"; @@ -163,6 +165,7 @@ public class ErvuDirectoriesService { } private void upsertRoleData(List dataList) { + String[] adminRoles = ervuAdminRole.split(","); List newRoleRecords = new ArrayList<>(); List roleRecords = new ArrayList<>(); List ids = ervuDirectoriesDaoService.getRoleIds(); @@ -183,6 +186,11 @@ public class ErvuDirectoriesService { roleRecord.setCreated(createdAt); roleRecord.setUpdated(updatedAt); roleRecord.setFinished(finishAt); + Arrays.stream(adminRoles).forEach(role -> { + if (role.trim().equals(data.getName())) { + roleRecord.setAdminRole(true); + } + }); if (ids.contains(data.getId())) { roleRecords.add(roleRecord); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateShedulerService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java similarity index 56% rename from backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateShedulerService.java rename to backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java index cba4eaf2..944a0c00 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateShedulerService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java @@ -2,29 +2,25 @@ package ru.micord.ervu.account_applications.service; import javax.annotation.PostConstruct; -import net.javacrumbs.shedlock.core.SchedulerLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import static org.springframework.scheduling.config.ScheduledTaskRegistrar.CRON_DISABLED; - /** * @author Eduard Tihomirov */ @Service -public class ErvuDirectoriesUpdateShedulerService { +public class ErvuDirectoriesUpdateService { @Autowired private ErvuDirectoriesService ervuDirectoriesService; - @Value("${directory.update.cron:0 0 */1 * * *}") - private String cronLoad; + @Value("${load.directories:true}") + private Boolean loadDirectories; @PostConstruct public void init() { - if (!cronLoad.equals(CRON_DISABLED)) { + if (loadDirectories) { new Thread(this::runWithSleep).start(); } } @@ -36,12 +32,6 @@ public class ErvuDirectoriesUpdateShedulerService { catch (InterruptedException e) { throw new RuntimeException(e); } - run(); - } - - @Scheduled(cron = "${directory.update.cron:0 0 */1 * * *}") - @SchedulerLock(name = "updateDirectories") - public void run() { ervuDirectoriesService.updateDirectories(); } } diff --git a/config/micord.env b/config/micord.env index ac1e50d3..c9d597b3 100644 --- a/config/micord.env +++ b/config/micord.env @@ -20,6 +20,8 @@ KAFKA_USER=user1 KAFKA_PASS=Blfi9d2OFG KAFKA_CONSUMER_GROUP_ID=1 KAFKA_DOMAIN_GROUP_ID=ervu-account-applications-backend-domain +KAFKA_DOMAIN_UPDATED_GROUP_ID=ervu-account-applications-backend-domain-updated +KAFKA_DOMAIN_CREATED_GROUP_ID=ervu-account-applications-backend-domain-updated KAFKA_ROLE_GROUP_ID=ervu-account-applications-backend-role IDM_URL=http://idm @@ -28,4 +30,6 @@ ERVU_HTTP_TIMEOUT=30 ERVU_PWD_SIGN_SECRET_KEY=xoL2Y3VRdQ4phXG85o6dRqcgqb4bk6ULdkJJdlRLhZM= KAFKA_ROLE_RECONCILIATION=idmv2.role.reconciliation KAFKA_DOMAIN_RECONCILIATION=idmv2.domain.reconciliation +KAFKA_DOMAIN_UPDATED=idmv2.domain.created +KAFKA_DOMAIN_CREATED=idmv2.domain.updated ERVU_ROLE_ADMIN=security_administrator \ No newline at end of file From 04a5937d992e02ac76336c8b0cb7c6cab2078ae5 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Thu, 17 Apr 2025 10:50:42 +0300 Subject: [PATCH 07/25] SUPPORT-9115: Fix --- .../service/ErvuDirectoriesService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 04e57fe0..1ebd84ec 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -40,8 +40,8 @@ public class ErvuDirectoriesService { MethodHandles.lookup().lookupClass()); @Value("${idm.url}") private String idmUrl; - @Value("${ervu.collection:domain, role}") - private String ervuCollection; + @Value("${ervu.directories:domain, role}") + private String ervuDirectories; @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") private String ervuAdminRole; @Autowired @@ -58,8 +58,8 @@ public class ErvuDirectoriesService { }) public void updateDirectories() { try { - String[] ervuCollectionArray = ervuCollection.split(","); - Arrays.stream(ervuCollectionArray).forEach(ervuCollection -> { + String[] ervuDirectoriesArray = ervuDirectories.split(","); + Arrays.stream(ervuDirectoriesArray).forEach(ervuCollection -> { String targetUrl = idmUrl + "/reconcile/"+ ervuCollection.trim() + "/to/kafka/v1"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); From 9d52630d44d6369acd6c4faa9286c8649086a00e Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Thu, 17 Apr 2025 12:04:00 +0300 Subject: [PATCH 08/25] SUPPORT-9115: Fix --- .../kafka/ErvuDirectoriesListener.java | 6 +++-- .../kafka/KafkaConfig.java | 7 +++++- .../service/ErvuDirectoriesUpdateService.java | 24 ++++++++++++------- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java index b61f7aed..ab690889 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java @@ -14,12 +14,14 @@ public class ErvuDirectoriesListener { @Autowired private ErvuDirectoriesService ervuDirectoriesService; - @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}") + @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", + autoStartup = "false") public void listenKafkaDomain(String kafkaMessage) { ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); } - @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}") + @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", + autoStartup = "false") public void listenKafkaRole(String kafkaMessage) { ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConfig.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConfig.java index 42ca29b4..679ca63f 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConfig.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConfig.java @@ -12,9 +12,9 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.annotation.EnableKafka; import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; -import org.springframework.kafka.support.serializer.JsonDeserializer; /** * @author Eduard Tihomirov @@ -40,6 +40,11 @@ public class KafkaConfig { return new DefaultKafkaConsumerFactory<>(consumerConfigs()); } + @Bean + public KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry() { + return new KafkaListenerEndpointRegistry(); + } + @Bean public Map consumerConfigs() { Map props = new HashMap<>(); diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java index 944a0c00..d4511a42 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java @@ -4,6 +4,8 @@ import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Service; /** @@ -14,24 +16,30 @@ public class ErvuDirectoriesUpdateService { @Autowired private ErvuDirectoriesService ervuDirectoriesService; + @Autowired + private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; @Value("${load.directories:true}") private Boolean loadDirectories; + @Value("${kafka.domain.group.id}") + private String domainGroupId; + + @Value("${kafka.role.group.id}") + private String roleGroupId; + @PostConstruct public void init() { + MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); + MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); + listenerContainerDomain.start(); + listenerContainerRole.start(); if (loadDirectories) { - new Thread(this::runWithSleep).start(); + new Thread(this::run).start(); } } - private void runWithSleep() { - try { - Thread.sleep(100000); - } - catch (InterruptedException e) { - throw new RuntimeException(e); - } + private void run() { ervuDirectoriesService.updateDirectories(); } } From a05422dc946dd5526787c8753ede0e53797d033d Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 10:27:47 +0300 Subject: [PATCH 09/25] SUPPORT-9115: Fix --- .../kafka/KafkaConsumerInitializer.java | 27 +++++++++++++++++++ .../service/ErvuDirectoriesUpdateService.java | 16 ++--------- 2 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java new file mode 100644 index 00000000..453cbe1d --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java @@ -0,0 +1,27 @@ +package ru.micord.ervu.account_applications.kafka; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.DependsOn; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.listener.MessageListenerContainer; +import org.springframework.stereotype.Component; + +/** + * @author Eduard Tihomirov + */ +@Component +@DependsOn("ervuDirectoriesListener") +public class KafkaConsumerInitializer { + @Value("${kafka.domain.group.id}") + private String domainGroupId; + + @Value("${kafka.role.group.id}") + private String roleGroupId; + + public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry) { + MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); + MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); + listenerContainerDomain.start(); + listenerContainerRole.start(); + } +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java index d4511a42..84dd9215 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java @@ -4,36 +4,24 @@ import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; -import org.springframework.kafka.listener.MessageListenerContainer; +import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Service; /** * @author Eduard Tihomirov */ @Service +@DependsOn("kafkaConsumerInitializer") public class ErvuDirectoriesUpdateService { @Autowired private ErvuDirectoriesService ervuDirectoriesService; - @Autowired - private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; @Value("${load.directories:true}") private Boolean loadDirectories; - @Value("${kafka.domain.group.id}") - private String domainGroupId; - - @Value("${kafka.role.group.id}") - private String roleGroupId; - @PostConstruct public void init() { - MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); - MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); - listenerContainerDomain.start(); - listenerContainerRole.start(); if (loadDirectories) { new Thread(this::run).start(); } From fe1b79202c629ba5029bec09f217790c5efee143 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 10:59:41 +0300 Subject: [PATCH 10/25] SUPPORT-9115: Fix --- .../kafka/ErvuDirectoriesListener.java | 48 -------------- .../kafka/KafkaConsumerInitializer.java | 27 -------- .../service/ErvuDirectoriesService.java | 64 ++++++++++++++++++- 3 files changed, 61 insertions(+), 78 deletions(-) delete mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java delete mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java deleted file mode 100644 index ab690889..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package ru.micord.ervu.account_applications.kafka; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.stereotype.Component; -import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; - -/** - * @author Eduard Tihomirov - */ -@Component -public class ErvuDirectoriesListener { - - @Autowired - private ErvuDirectoriesService ervuDirectoriesService; - - @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", - autoStartup = "false") - public void listenKafkaDomain(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", - autoStartup = "false") - public void listenKafkaRole(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); - } -// Пока не заведены, обещают в будущих апдейтах создать -// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") - public void listenKafkaDomainUpdated(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") - public void listenKafkaDomainCreated(String kafkaMessage) { - ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); - } -} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java deleted file mode 100644 index 453cbe1d..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.micord.ervu.account_applications.kafka; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; -import org.springframework.kafka.listener.MessageListenerContainer; -import org.springframework.stereotype.Component; - -/** - * @author Eduard Tihomirov - */ -@Component -@DependsOn("ervuDirectoriesListener") -public class KafkaConsumerInitializer { - @Value("${kafka.domain.group.id}") - private String domainGroupId; - - @Value("${kafka.role.group.id}") - private String roleGroupId; - - public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry) { - MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); - MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); - listenerContainerDomain.start(); - listenerContainerRole.start(); - } -} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 1ebd84ec..a9197259 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -9,6 +9,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.annotation.PostConstruct; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -22,6 +24,9 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; @@ -34,7 +39,7 @@ import ru.micord.ervu.account_applications.model.RoleResponse; * @author Eduard Tihomirov */ @Service -@DependsOn({"liquibase", "ervuDirectoriesListener"}) +@DependsOn("liquibase") public class ErvuDirectoriesService { private static final Logger LOGGER = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass()); @@ -44,12 +49,67 @@ public class ErvuDirectoriesService { private String ervuDirectories; @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") private String ervuAdminRole; + @Value("${load.directories:true}") + private Boolean loadDirectories; + @Value("${kafka.domain.group.id}") + private String domainGroupId; + @Value("${kafka.role.group.id}") + private String roleGroupId; @Autowired private RestTemplate restTemplate; @Autowired private ErvuDirectoriesDaoService ervuDirectoriesDaoService; @Autowired private ObjectMapper objectMapper; + @Autowired + private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; + + @PostConstruct + public void init() { + MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); + MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); + listenerContainerDomain.start(); + listenerContainerRole.start(); + if (loadDirectories) { + new Thread(this::updateDirectories).start(); + } + } + + @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", + autoStartup = "false") + @Transactional + public void listenKafkaDomain(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", + autoStartup = "false") + @Transactional + public void listenKafkaRole(String kafkaMessage) { + upsertKafkaRoleMessage(kafkaMessage); + } +// Пока не заведены, обещают в будущих апдейтах создать +// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") + @Transactional + public void listenKafkaDomainUpdated(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") + @Transactional + public void listenKafkaDomainCreated(String kafkaMessage) { + upsertKafkaDomainMessage(kafkaMessage); + } @Caching(evict = { @@ -81,7 +141,6 @@ public class ErvuDirectoriesService { } - @Transactional public void upsertKafkaDomainMessage(String kafkaMessage) { RecruitmentResponse[] recruitmentResponses; try { @@ -95,7 +154,6 @@ public class ErvuDirectoriesService { } } - @Transactional public void upsertKafkaRoleMessage(String kafkaMessage) { RoleResponse[] roleResponses; try { From 204464bde294e302a31dbec70253768c3f16314f Mon Sep 17 00:00:00 2001 From: "adel.kalimullin" Date: Fri, 18 Apr 2025 11:11:49 +0300 Subject: [PATCH 11/25] SUPPORT-9123:fix remove-roles --- .../service/RoleServiceImpl.java | 2 +- .../component/button/UserManagementService.ts | 32 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java index 7632a2f8..749acc4e 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java @@ -38,8 +38,8 @@ public class RoleServiceImpl extends AbstractUserDataService { public List fetchRemovedRoleIds(String accountId, Set newRoleIds) { try { return fetchRolesByAccountId(accountId).stream() + .filter(role -> role.isErvuRole() && !newRoleIds.contains(role.getId())) .map(Role::getId) - .filter(id -> !newRoleIds.contains(id)) .toList(); } catch (Exception e) { diff --git a/frontend/src/ts/account_applications/component/button/UserManagementService.ts b/frontend/src/ts/account_applications/component/button/UserManagementService.ts index 451b4865..b637a504 100644 --- a/frontend/src/ts/account_applications/component/button/UserManagementService.ts +++ b/frontend/src/ts/account_applications/component/button/UserManagementService.ts @@ -48,15 +48,16 @@ export class UserManagementService extends Behavior { private onClickFunction: Function; private sendToErvu: boolean = false; private rpc: UserApplicationListRpcService; + private authService: AuthorizationService; initialize() { super.initialize(); this.button = this.getScript(SaveButton); this.httpClient = this.injector.get(HttpClient); this.rpc = this.getScript(UserApplicationListRpcService); - let authService = this.injector.get(AuthorizationService); + this.authService = this.injector.get(AuthorizationService); this.onClickFunction = () => { - if (!authService.hasRole('security_administrator') || !this.sendToErvu) { + if (!this.authService.hasRole('security_administrator') || !this.sendToErvu) { return; } let kind = this.applicationKind.getValue(); @@ -79,6 +80,7 @@ export class UserManagementService extends Behavior { request = new CreateAccountRequest(); request.data = createData; request.processKey = ProcessKey.CREATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_MAIN: let editPersonData = new EditPersonData(); @@ -87,6 +89,7 @@ export class UserManagementService extends Behavior { request = new EditPersonRequest(); request.data = editPersonData; request.processKey = ProcessKey.EDIT_PERSON; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_ACCOUNT: let editAccountData = new EditAccountData(); @@ -96,6 +99,7 @@ export class UserManagementService extends Behavior { request = new EditAccountRequest(); request.data = editAccountData; request.processKey = ProcessKey.EDIT_ACCOUNT; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_ROLES: let editRolesAccount = new EditRolesAccount(); @@ -108,12 +112,15 @@ export class UserManagementService extends Behavior { return role; }); this.rpc.getRemovedRoleIds(accountId, rolesList) - .then(list => editRolesAccount.removeRoles = list); - let editRolesData = new EditRolesData(); - editRolesData.account = editRolesAccount; - request = new EditRolesRequest(); - request.data = editRolesData; - request.processKey = ProcessKey.EDIT_ROLES; + .then(list => { + editRolesAccount.removeRoles = list; + let editRolesData = new EditRolesData(); + editRolesData.account = editRolesAccount; + request = new EditRolesRequest(); + request.data = editRolesData; + request.processKey = ProcessKey.EDIT_ROLES; + this.doRequest(request, formJson['appNumber']); + }); break; case ApplicationKind.BLOCK_USER: let deactivationData = new ChangeActivationData(); @@ -121,6 +128,7 @@ export class UserManagementService extends Behavior { request = new ChangeActivationRequest(); request.data = deactivationData; request.processKey = ProcessKey.DEACTIVATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.UNBLOCK_USER: let activationData = new ChangeActivationData(); @@ -128,6 +136,7 @@ export class UserManagementService extends Behavior { request = new ChangeActivationRequest(); request.data = activationData; request.processKey = ProcessKey.ACTIVATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.RESET_PASSWORD: let resetPasswordAccount = new ResetPasswordAccount(); @@ -137,12 +146,10 @@ export class UserManagementService extends Behavior { request = new ResetPasswordRequest(); request.data = resetPasswordData; request.processKey = ProcessKey.RESET_PASSWORD; + this.doRequest(request, formJson['appNumber']); break; } - - request.userId = authService.getUserId(); - this.doRequest(request, formJson['appNumber']); - } + }; } @Visible() @@ -171,6 +178,7 @@ export class UserManagementService extends Behavior { private doRequest(request: any, appNumber: number): void { const url = window.location.origin + UserManagementService.PROCESS_START_PATH; + request.userId = this.authService.getUserId(); this.httpClient.post(url, request).toPromise() .then((response: ProcessResponse) => { let code = response.code; From 3eaae2336c6b119d322d05c5f1be37e38b869be3 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 13:26:34 +0300 Subject: [PATCH 12/25] SUPPORT-9115: Fix --- .../service/ErvuDirectoriesService.java | 12 ++++--- .../service/ErvuDirectoriesUpdateService.java | 33 ------------------- 2 files changed, 7 insertions(+), 38 deletions(-) delete mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index a9197259..6af98fe6 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import javax.annotation.PostConstruct; @@ -244,11 +245,12 @@ public class ErvuDirectoriesService { roleRecord.setCreated(createdAt); roleRecord.setUpdated(updatedAt); roleRecord.setFinished(finishAt); - Arrays.stream(adminRoles).forEach(role -> { - if (role.trim().equals(data.getName())) { - roleRecord.setAdminRole(true); - } - }); + Optional adminRole = Arrays.stream(adminRoles) + .filter(role -> role.trim().equals(data.getName())) + .findAny(); + if (adminRole.isPresent()) { + roleRecord.setAdminRole(true); + } if (ids.contains(data.getId())) { roleRecords.add(roleRecord); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java deleted file mode 100644 index 84dd9215..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java +++ /dev/null @@ -1,33 +0,0 @@ -package ru.micord.ervu.account_applications.service; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; -import org.springframework.stereotype.Service; - -/** - * @author Eduard Tihomirov - */ -@Service -@DependsOn("kafkaConsumerInitializer") -public class ErvuDirectoriesUpdateService { - - @Autowired - private ErvuDirectoriesService ervuDirectoriesService; - - @Value("${load.directories:true}") - private Boolean loadDirectories; - - @PostConstruct - public void init() { - if (loadDirectories) { - new Thread(this::run).start(); - } - } - - private void run() { - ervuDirectoriesService.updateDirectories(); - } -} From 69dbb5ae42aa57a00262c0bebe4ef54030257c5f Mon Sep 17 00:00:00 2001 From: "adel.kalimullin" Date: Fri, 18 Apr 2025 11:11:49 +0300 Subject: [PATCH 13/25] SUPPORT-9123 sync --- .../service/RoleServiceImpl.java | 2 +- .../component/button/UserManagementService.ts | 32 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java index 7632a2f8..749acc4e 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/RoleServiceImpl.java @@ -38,8 +38,8 @@ public class RoleServiceImpl extends AbstractUserDataService { public List fetchRemovedRoleIds(String accountId, Set newRoleIds) { try { return fetchRolesByAccountId(accountId).stream() + .filter(role -> role.isErvuRole() && !newRoleIds.contains(role.getId())) .map(Role::getId) - .filter(id -> !newRoleIds.contains(id)) .toList(); } catch (Exception e) { diff --git a/frontend/src/ts/account_applications/component/button/UserManagementService.ts b/frontend/src/ts/account_applications/component/button/UserManagementService.ts index 451b4865..b637a504 100644 --- a/frontend/src/ts/account_applications/component/button/UserManagementService.ts +++ b/frontend/src/ts/account_applications/component/button/UserManagementService.ts @@ -48,15 +48,16 @@ export class UserManagementService extends Behavior { private onClickFunction: Function; private sendToErvu: boolean = false; private rpc: UserApplicationListRpcService; + private authService: AuthorizationService; initialize() { super.initialize(); this.button = this.getScript(SaveButton); this.httpClient = this.injector.get(HttpClient); this.rpc = this.getScript(UserApplicationListRpcService); - let authService = this.injector.get(AuthorizationService); + this.authService = this.injector.get(AuthorizationService); this.onClickFunction = () => { - if (!authService.hasRole('security_administrator') || !this.sendToErvu) { + if (!this.authService.hasRole('security_administrator') || !this.sendToErvu) { return; } let kind = this.applicationKind.getValue(); @@ -79,6 +80,7 @@ export class UserManagementService extends Behavior { request = new CreateAccountRequest(); request.data = createData; request.processKey = ProcessKey.CREATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_MAIN: let editPersonData = new EditPersonData(); @@ -87,6 +89,7 @@ export class UserManagementService extends Behavior { request = new EditPersonRequest(); request.data = editPersonData; request.processKey = ProcessKey.EDIT_PERSON; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_ACCOUNT: let editAccountData = new EditAccountData(); @@ -96,6 +99,7 @@ export class UserManagementService extends Behavior { request = new EditAccountRequest(); request.data = editAccountData; request.processKey = ProcessKey.EDIT_ACCOUNT; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.EDIT_USER_ROLES: let editRolesAccount = new EditRolesAccount(); @@ -108,12 +112,15 @@ export class UserManagementService extends Behavior { return role; }); this.rpc.getRemovedRoleIds(accountId, rolesList) - .then(list => editRolesAccount.removeRoles = list); - let editRolesData = new EditRolesData(); - editRolesData.account = editRolesAccount; - request = new EditRolesRequest(); - request.data = editRolesData; - request.processKey = ProcessKey.EDIT_ROLES; + .then(list => { + editRolesAccount.removeRoles = list; + let editRolesData = new EditRolesData(); + editRolesData.account = editRolesAccount; + request = new EditRolesRequest(); + request.data = editRolesData; + request.processKey = ProcessKey.EDIT_ROLES; + this.doRequest(request, formJson['appNumber']); + }); break; case ApplicationKind.BLOCK_USER: let deactivationData = new ChangeActivationData(); @@ -121,6 +128,7 @@ export class UserManagementService extends Behavior { request = new ChangeActivationRequest(); request.data = deactivationData; request.processKey = ProcessKey.DEACTIVATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.UNBLOCK_USER: let activationData = new ChangeActivationData(); @@ -128,6 +136,7 @@ export class UserManagementService extends Behavior { request = new ChangeActivationRequest(); request.data = activationData; request.processKey = ProcessKey.ACTIVATE; + this.doRequest(request, formJson['appNumber']); break; case ApplicationKind.RESET_PASSWORD: let resetPasswordAccount = new ResetPasswordAccount(); @@ -137,12 +146,10 @@ export class UserManagementService extends Behavior { request = new ResetPasswordRequest(); request.data = resetPasswordData; request.processKey = ProcessKey.RESET_PASSWORD; + this.doRequest(request, formJson['appNumber']); break; } - - request.userId = authService.getUserId(); - this.doRequest(request, formJson['appNumber']); - } + }; } @Visible() @@ -171,6 +178,7 @@ export class UserManagementService extends Behavior { private doRequest(request: any, appNumber: number): void { const url = window.location.origin + UserManagementService.PROCESS_START_PATH; + request.userId = this.authService.getUserId(); this.httpClient.post(url, request).toPromise() .then((response: ProcessResponse) => { let code = response.code; From e234355e242cb916aaab1d46a131ea107b650603 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 15:49:54 +0300 Subject: [PATCH 14/25] Revert "SUPPORT-9115: Fix" This reverts commit 3eaae2336c6b119d322d05c5f1be37e38b869be3. --- .../service/ErvuDirectoriesService.java | 12 +++---- .../service/ErvuDirectoriesUpdateService.java | 33 +++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 6af98fe6..a9197259 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.UUID; import javax.annotation.PostConstruct; @@ -245,12 +244,11 @@ public class ErvuDirectoriesService { roleRecord.setCreated(createdAt); roleRecord.setUpdated(updatedAt); roleRecord.setFinished(finishAt); - Optional adminRole = Arrays.stream(adminRoles) - .filter(role -> role.trim().equals(data.getName())) - .findAny(); - if (adminRole.isPresent()) { - roleRecord.setAdminRole(true); - } + Arrays.stream(adminRoles).forEach(role -> { + if (role.trim().equals(data.getName())) { + roleRecord.setAdminRole(true); + } + }); if (ids.contains(data.getId())) { roleRecords.add(roleRecord); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java new file mode 100644 index 00000000..84dd9215 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java @@ -0,0 +1,33 @@ +package ru.micord.ervu.account_applications.service; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Service; + +/** + * @author Eduard Tihomirov + */ +@Service +@DependsOn("kafkaConsumerInitializer") +public class ErvuDirectoriesUpdateService { + + @Autowired + private ErvuDirectoriesService ervuDirectoriesService; + + @Value("${load.directories:true}") + private Boolean loadDirectories; + + @PostConstruct + public void init() { + if (loadDirectories) { + new Thread(this::run).start(); + } + } + + private void run() { + ervuDirectoriesService.updateDirectories(); + } +} From 9a3e6565cce36da74b6c1320b0e9c79a33ce3a72 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 15:50:03 +0300 Subject: [PATCH 15/25] Revert "SUPPORT-9115: Fix" This reverts commit fe1b79202c629ba5029bec09f217790c5efee143. --- .../kafka/ErvuDirectoriesListener.java | 48 ++++++++++++++ .../kafka/KafkaConsumerInitializer.java | 27 ++++++++ .../service/ErvuDirectoriesService.java | 64 +------------------ 3 files changed, 78 insertions(+), 61 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java new file mode 100644 index 00000000..ab690889 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java @@ -0,0 +1,48 @@ +package ru.micord.ervu.account_applications.kafka; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Component; +import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; + +/** + * @author Eduard Tihomirov + */ +@Component +public class ErvuDirectoriesListener { + + @Autowired + private ErvuDirectoriesService ervuDirectoriesService; + + @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", + autoStartup = "false") + public void listenKafkaDomain(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", + autoStartup = "false") + public void listenKafkaRole(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); + } +// Пока не заведены, обещают в будущих апдейтах создать +// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") +// public void listenKafkaRoleUpdated(String kafkaMessage) { +// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); +// } + + @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") + public void listenKafkaDomainUpdated(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); + } + + @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") + public void listenKafkaDomainCreated(String kafkaMessage) { + ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); + } +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java new file mode 100644 index 00000000..453cbe1d --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java @@ -0,0 +1,27 @@ +package ru.micord.ervu.account_applications.kafka; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.DependsOn; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.listener.MessageListenerContainer; +import org.springframework.stereotype.Component; + +/** + * @author Eduard Tihomirov + */ +@Component +@DependsOn("ervuDirectoriesListener") +public class KafkaConsumerInitializer { + @Value("${kafka.domain.group.id}") + private String domainGroupId; + + @Value("${kafka.role.group.id}") + private String roleGroupId; + + public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry) { + MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); + MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); + listenerContainerDomain.start(); + listenerContainerRole.start(); + } +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index a9197259..1ebd84ec 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import javax.annotation.PostConstruct; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -24,9 +22,6 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; -import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; @@ -39,7 +34,7 @@ import ru.micord.ervu.account_applications.model.RoleResponse; * @author Eduard Tihomirov */ @Service -@DependsOn("liquibase") +@DependsOn({"liquibase", "ervuDirectoriesListener"}) public class ErvuDirectoriesService { private static final Logger LOGGER = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass()); @@ -49,67 +44,12 @@ public class ErvuDirectoriesService { private String ervuDirectories; @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") private String ervuAdminRole; - @Value("${load.directories:true}") - private Boolean loadDirectories; - @Value("${kafka.domain.group.id}") - private String domainGroupId; - @Value("${kafka.role.group.id}") - private String roleGroupId; @Autowired private RestTemplate restTemplate; @Autowired private ErvuDirectoriesDaoService ervuDirectoriesDaoService; @Autowired private ObjectMapper objectMapper; - @Autowired - private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; - - @PostConstruct - public void init() { - MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); - MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); - listenerContainerDomain.start(); - listenerContainerRole.start(); - if (loadDirectories) { - new Thread(this::updateDirectories).start(); - } - } - - @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", - autoStartup = "false") - @Transactional - public void listenKafkaDomain(String kafkaMessage) { - upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", - autoStartup = "false") - @Transactional - public void listenKafkaRole(String kafkaMessage) { - upsertKafkaRoleMessage(kafkaMessage); - } -// Пока не заведены, обещают в будущих апдейтах создать -// @KafkaListener(id = "${kafka.role.updated.group.id}", topics = "${kafka.role.updated}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - // @KafkaListener(id = "${kafka.role.created.group.id}", topics = "${kafka.role.created}") -// public void listenKafkaRoleUpdated(String kafkaMessage) { -// ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); -// } - - @KafkaListener(id = "${kafka.domain.updated.group.id}", topics = "${kafka.domain.updated}") - @Transactional - public void listenKafkaDomainUpdated(String kafkaMessage) { - upsertKafkaDomainMessage(kafkaMessage); - } - - @KafkaListener(id = "${kafka.domain.created.group.id}", topics = "${kafka.domain.created}") - @Transactional - public void listenKafkaDomainCreated(String kafkaMessage) { - upsertKafkaDomainMessage(kafkaMessage); - } @Caching(evict = { @@ -141,6 +81,7 @@ public class ErvuDirectoriesService { } + @Transactional public void upsertKafkaDomainMessage(String kafkaMessage) { RecruitmentResponse[] recruitmentResponses; try { @@ -154,6 +95,7 @@ public class ErvuDirectoriesService { } } + @Transactional public void upsertKafkaRoleMessage(String kafkaMessage) { RoleResponse[] roleResponses; try { From 1580b65fc2c3b9e57d85fa029898ef42667f78d3 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Fri, 18 Apr 2025 16:12:30 +0300 Subject: [PATCH 16/25] SUPPORT-9115: Fix --- .../kafka/KafkaConsumerInitializer.java | 9 ++++- .../service/ErvuDirectoriesService.java | 2 +- .../service/ErvuDirectoriesUpdateService.java | 33 ------------------- 3 files changed, 9 insertions(+), 35 deletions(-) delete mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java index 453cbe1d..1b443443 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java @@ -5,6 +5,7 @@ import org.springframework.context.annotation.DependsOn; import org.springframework.kafka.config.KafkaListenerEndpointRegistry; import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Component; +import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; /** * @author Eduard Tihomirov @@ -18,10 +19,16 @@ public class KafkaConsumerInitializer { @Value("${kafka.role.group.id}") private String roleGroupId; - public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry) { + @Value("${load.directories:true}") + private Boolean loadDirectories; + + public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry, ErvuDirectoriesService ervuDirectoriesService) { MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); listenerContainerDomain.start(); listenerContainerRole.start(); + if (loadDirectories) { + new Thread(ervuDirectoriesService::updateDirectories).start(); + } } } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 1ebd84ec..8634aebe 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -34,7 +34,7 @@ import ru.micord.ervu.account_applications.model.RoleResponse; * @author Eduard Tihomirov */ @Service -@DependsOn({"liquibase", "ervuDirectoriesListener"}) +@DependsOn("liquibase") public class ErvuDirectoriesService { private static final Logger LOGGER = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass()); diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java deleted file mode 100644 index 84dd9215..00000000 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesUpdateService.java +++ /dev/null @@ -1,33 +0,0 @@ -package ru.micord.ervu.account_applications.service; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; -import org.springframework.stereotype.Service; - -/** - * @author Eduard Tihomirov - */ -@Service -@DependsOn("kafkaConsumerInitializer") -public class ErvuDirectoriesUpdateService { - - @Autowired - private ErvuDirectoriesService ervuDirectoriesService; - - @Value("${load.directories:true}") - private Boolean loadDirectories; - - @PostConstruct - public void init() { - if (loadDirectories) { - new Thread(this::run).start(); - } - } - - private void run() { - ervuDirectoriesService.updateDirectories(); - } -} From 94ffdd1f7843cee338ffc439e838b89572dcf77a Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Mon, 21 Apr 2025 10:14:00 +0300 Subject: [PATCH 17/25] SUPPORT-9115: Fix --- .../service/ErvuDirectoriesService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 8634aebe..0f851dd2 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import com.fasterxml.jackson.core.JsonProcessingException; @@ -186,11 +187,12 @@ public class ErvuDirectoriesService { roleRecord.setCreated(createdAt); roleRecord.setUpdated(updatedAt); roleRecord.setFinished(finishAt); - Arrays.stream(adminRoles).forEach(role -> { - if (role.trim().equals(data.getName())) { - roleRecord.setAdminRole(true); - } - }); + Optional adminRoleOptional = Arrays.stream(adminRoles) + .filter(role -> role.trim().equals(data.getName())) + .findAny(); + if (adminRoleOptional.isPresent()) { + roleRecord.setAdminRole(true); + } if (ids.contains(data.getId())) { roleRecords.add(roleRecord); } From 5bfee385bb21d0b99141f350c9a3d7597a787c16 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Mon, 21 Apr 2025 10:57:06 +0300 Subject: [PATCH 18/25] SUPPORT-9115: Fix --- .../account_applications/service/ErvuDirectoriesService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index 0f851dd2..dfa6a51e 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -43,7 +43,7 @@ public class ErvuDirectoriesService { private String idmUrl; @Value("${ervu.directories:domain, role}") private String ervuDirectories; - @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator}") + @Value("${ervu.admin.role:gomu_supervisor, system_administrator, security_administrator, Responsible_for_internal_control}") private String ervuAdminRole; @Autowired private RestTemplate restTemplate; From 3ab42d4e1dbd20f4a0e1ab8f9de31c40def5f1bb Mon Sep 17 00:00:00 2001 From: Zaripov Emil Date: Mon, 21 Apr 2025 14:35:08 +0300 Subject: [PATCH 19/25] set version 1.10.0-SNAPSHOT --- backend/pom.xml | 2 +- distribution/pom.xml | 2 +- frontend/pom.xml | 2 +- pom.xml | 2 +- resources/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 8f7953c5..ce6db12b 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -5,7 +5,7 @@ ru.micord.ervu account-applications - 1.9.12-SNAPSHOT + 1.10.0-SNAPSHOT ru.micord.ervu.account_applications backend diff --git a/distribution/pom.xml b/distribution/pom.xml index 6aa212db..a8406da0 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu account-applications - 1.9.12-SNAPSHOT + 1.10.0-SNAPSHOT ru.micord.ervu.account_applications diff --git a/frontend/pom.xml b/frontend/pom.xml index 2f6ceb61..b64fb913 100644 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu account-applications - 1.9.12-SNAPSHOT + 1.10.0-SNAPSHOT ru.micord.ervu.account_applications diff --git a/pom.xml b/pom.xml index 369be72b..30f3885c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 ru.micord.ervu account-applications - 1.9.12-SNAPSHOT + 1.10.0-SNAPSHOT pom backend diff --git a/resources/pom.xml b/resources/pom.xml index 7ad0d2b0..f78ead3c 100644 --- a/resources/pom.xml +++ b/resources/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu account-applications - 1.9.12-SNAPSHOT + 1.10.0-SNAPSHOT ru.micord.ervu.account_applications From bafe64e6afe453eeec6bc149af838ff7f3833c35 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Mon, 21 Apr 2025 15:44:30 +0300 Subject: [PATCH 20/25] Revert "Merge remote-tracking branch 'origin/release/1.9.12' into develop" This reverts commit dfb6c493b104281c1e03ada35d82fe523a32b2d0, reversing changes made to 71aa1a8bda340aa0e80c1f9011fbb8538950e30d. --- .../component/dao/AuditDao.java | 42 +++++++++++++++++++ .../db_beans/public_/Public.java | 7 ++++ .../db_beans/public_/Tables.java | 6 +++ .../service/UserApplicationListService.java | 30 ++++++++++++- .../v_1.0/20250411_SUPPORT-9099_add_audit.xml | 28 +++++++++++++ .../Создание заявки на добавление пользователя.page | 4 ++ .../Создать заявку на активацию.page | 7 ---- .../Создать заявку на деактивацию.page | 7 ---- 8 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java create mode 100644 backend/src/main/resources/config/v_1.0/20250411_SUPPORT-9099_add_audit.xml diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java b/backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java new file mode 100644 index 00000000..c6baf9b9 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java @@ -0,0 +1,42 @@ +package ru.micord.ervu.account_applications.component.dao; + +import java.sql.Timestamp; +import java.util.List; + +import org.jooq.DSLContext; +import org.springframework.stereotype.Repository; + + +import static ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationList.USER_APPLICATION_LIST; +import static ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT; + +/** + * @author Eduard Tihomirov + */ +@Repository +public class AuditDao { + + private final DSLContext dslContext; + + public AuditDao(DSLContext dslContext) { + this.dslContext = dslContext; + } + + public void insert(Long listId, String fio, String login, String status, Timestamp timestamp) { + dslContext.insertInto(USER_APPLICATION_LIST_AUDIT) + .set(USER_APPLICATION_LIST_AUDIT.USER_APPLICATION_LIST_ID, listId) + .set(USER_APPLICATION_LIST_AUDIT.FIO, fio) + .set(USER_APPLICATION_LIST_AUDIT.STATUS, status) + .set(USER_APPLICATION_LIST_AUDIT.DATE, timestamp) + .set(USER_APPLICATION_LIST_AUDIT.LOGIN, login) + .execute(); + } + + public List selectAppListIdsByTraceId(String traceId) { + return dslContext.select(USER_APPLICATION_LIST.USER_APPLICATION_LIST_ID) + .from(USER_APPLICATION_LIST) + .where(USER_APPLICATION_LIST.TRACE_ID.eq(traceId)) + .fetch(USER_APPLICATION_LIST.USER_APPLICATION_LIST_ID); + } + +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Public.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Public.java index b1952ad7..08f7a09d 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Public.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Public.java @@ -24,6 +24,7 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.Recruitment; import ru.micord.ervu.account_applications.db_beans.public_.tables.Shedlock; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationDocument; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationList; +import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationRole; @@ -97,6 +98,11 @@ public class Public extends SchemaImpl { */ public final UserApplicationList USER_APPLICATION_LIST = UserApplicationList.USER_APPLICATION_LIST; + /** + * The table public.user_application_list_audit. + */ + public final UserApplicationListAudit USER_APPLICATION_LIST_AUDIT = UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT; + /** * The table public.user_application_role. */ @@ -139,6 +145,7 @@ public class Public extends SchemaImpl { Shedlock.SHEDLOCK, UserApplicationDocument.USER_APPLICATION_DOCUMENT, UserApplicationList.USER_APPLICATION_LIST, + UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT, UserApplicationRole.USER_APPLICATION_ROLE ); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Tables.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Tables.java index b915f183..a2d0a292 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Tables.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/Tables.java @@ -15,6 +15,7 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.Recruitment; import ru.micord.ervu.account_applications.db_beans.public_.tables.Shedlock; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationDocument; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationList; +import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit; import ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationRole; @@ -81,6 +82,11 @@ public class Tables { */ public static final UserApplicationList USER_APPLICATION_LIST = UserApplicationList.USER_APPLICATION_LIST; + /** + * The table public.user_application_list_audit. + */ + public static final UserApplicationListAudit USER_APPLICATION_LIST_AUDIT = UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT; + /** * The table public.user_application_role. */ diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/UserApplicationListService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/UserApplicationListService.java index d45c11aa..553d68dc 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/UserApplicationListService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/UserApplicationListService.java @@ -1,8 +1,19 @@ package ru.micord.ervu.account_applications.service; +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.List; + +import org.apache.kafka.common.protocol.types.Field; import org.springframework.stereotype.Service; +import ru.micord.ervu.account_applications.component.dao.AuditDao; import ru.micord.ervu.account_applications.dao.UserApplicationListDao; +import ru.micord.ervu.account_applications.security.context.SecurityContext; +import ru.micord.ervu.account_applications.security.model.jwt.UserSession; + +import static ru.micord.ervu.account_applications.enums.ApplicationStatus.ACCEPTED; +import static ru.micord.ervu.account_applications.enums.ApplicationStatus.AGREED; /** * @author gulnaz @@ -11,9 +22,13 @@ import ru.micord.ervu.account_applications.dao.UserApplicationListDao; public class UserApplicationListService { private final UserApplicationListDao dao; + private final AuditDao auditDao; + private final SecurityContext securityContext; - public UserApplicationListService(UserApplicationListDao dao) { + public UserApplicationListService(UserApplicationListDao dao, AuditDao auditDao, SecurityContext securityContext) { this.dao = dao; + this.auditDao = auditDao; + this.securityContext = securityContext; } public void saveTraceId(String traceId, long appNumber) { @@ -22,6 +37,7 @@ public class UserApplicationListService { public void savePassword(String traceId, String encodedPass) { dao.savePassword(traceId, encodedPass); + saveAuditStatusByTraceId(traceId, ACCEPTED.name()); } public boolean userExists(String login){ @@ -30,6 +46,7 @@ public class UserApplicationListService { public void saveAcceptedStatus(String traceId) { dao.saveAcceptedStatus(traceId); + saveAuditStatusByTraceId(traceId, ACCEPTED.name()); } public void saveAgreedStatus(long appNumber) { @@ -38,5 +55,16 @@ public class UserApplicationListService { public void saveError(String traceId, String errorMsg) { dao.saveError(traceId, errorMsg); + saveAuditStatusByTraceId(traceId, AGREED.name()); + } + + private void saveAuditStatusByTraceId(String traceId, String status) { + List appListIds = auditDao.selectAppListIdsByTraceId(traceId); + UserSession userSession = securityContext.getUserSession(); + String name = userSession.name(); + String userId = userSession.userId(); + appListIds.forEach(id -> { + auditDao.insert(id, name, userId, status, Timestamp.valueOf(LocalDateTime.now())); + }); } } diff --git a/backend/src/main/resources/config/v_1.0/20250411_SUPPORT-9099_add_audit.xml b/backend/src/main/resources/config/v_1.0/20250411_SUPPORT-9099_add_audit.xml new file mode 100644 index 00000000..dc338c7d --- /dev/null +++ b/backend/src/main/resources/config/v_1.0/20250411_SUPPORT-9099_add_audit.xml @@ -0,0 +1,28 @@ + + + + + add audit table + + CREATE TABLE IF NOT EXISTS public.user_application_list_audit ( + id uuid NOT NULL DEFAULT uuid_generate_v4(), + user_application_list_id bigserial, + date TIMESTAMP WITHOUT TIME ZONE DEFAULT now(), + status character varying(100), + fio character varying(1000), + login character varying(1000) + ) + TABLESPACE pg_default; + + ALTER TABLE IF EXISTS public.user_application_list_audit + OWNER TO ervu_account_applications; + + GRANT ALL ON TABLE public.user_application_role TO ervu_account_applications; + + + + \ No newline at end of file diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создание заявки на добавление пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создание заявки на добавление пользователя.page index 47231b1e..41db4061 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создание заявки на добавление пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создание заявки на добавление пользователя.page @@ -799,6 +799,10 @@ formDao + + AuditFormDaoImpl + ru.micord.ervu.account_applications.component.service + graph diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page index 0366b08d..575659ef 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page @@ -8870,13 +8870,6 @@ false true - - 887d2044-9e34-46a5-852c-e9ce07b42f30 - 5b8c5ac4-549d-411f-80ff-d29293638e5f - Пол - false - true - 4d981f15-5535-45f7-882b-3647b251ad05 39040b94-4780-4067-864e-64ad3d22a2a3 diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page index c849ee8f..bc307890 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page @@ -8871,13 +8871,6 @@ false true - - 887d2044-9e34-46a5-852c-e9ce07b42f30 - 5b8c5ac4-549d-411f-80ff-d29293638e5f - Пол - false - true - 4d981f15-5535-45f7-882b-3647b251ad05 39040b94-4780-4067-864e-64ad3d22a2a3 From d1716cd9c8aadcc1536a405db9b44f2c5c726325 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 22 Apr 2025 12:48:14 +0300 Subject: [PATCH 21/25] fix --- .../kafka/ErvuDirectoriesListener.java | 6 ++-- .../kafka/KafkaConsumerInitializer.java | 34 +++++++++++-------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java index ab690889..b61f7aed 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/ErvuDirectoriesListener.java @@ -14,14 +14,12 @@ public class ErvuDirectoriesListener { @Autowired private ErvuDirectoriesService ervuDirectoriesService; - @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}", - autoStartup = "false") + @KafkaListener(id = "${kafka.domain.group.id}", topics = "${kafka.domain.reconciliation}") public void listenKafkaDomain(String kafkaMessage) { ervuDirectoriesService.upsertKafkaDomainMessage(kafkaMessage); } - @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}", - autoStartup = "false") + @KafkaListener(id = "${kafka.role.group.id}", topics = "${kafka.role.reconciliation}") public void listenKafkaRole(String kafkaMessage) { ervuDirectoriesService.upsertKafkaRoleMessage(kafkaMessage); } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java index 1b443443..81e21891 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/KafkaConsumerInitializer.java @@ -1,9 +1,8 @@ package ru.micord.ervu.account_applications.kafka; +import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.DependsOn; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; -import org.springframework.kafka.listener.MessageListenerContainer; import org.springframework.stereotype.Component; import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; @@ -13,22 +12,29 @@ import ru.micord.ervu.account_applications.service.ErvuDirectoriesService; @Component @DependsOn("ervuDirectoriesListener") public class KafkaConsumerInitializer { - @Value("${kafka.domain.group.id}") - private String domainGroupId; - - @Value("${kafka.role.group.id}") - private String roleGroupId; - @Value("${load.directories:true}") private Boolean loadDirectories; - public KafkaConsumerInitializer(KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry, ErvuDirectoriesService ervuDirectoriesService) { - MessageListenerContainer listenerContainerDomain = kafkaListenerEndpointRegistry.getListenerContainer(domainGroupId); - MessageListenerContainer listenerContainerRole = kafkaListenerEndpointRegistry.getListenerContainer(roleGroupId); - listenerContainerDomain.start(); - listenerContainerRole.start(); + private final ErvuDirectoriesService ervuDirectoriesService; + + public KafkaConsumerInitializer(ErvuDirectoriesService ervuDirectoriesService) { + this.ervuDirectoriesService = ervuDirectoriesService; + } + + @PostConstruct + public void init() { if (loadDirectories) { - new Thread(ervuDirectoriesService::updateDirectories).start(); + new Thread(this::runWithSleep).start(); } } + + private void runWithSleep() { + try { + Thread.sleep(10000); + } + catch (InterruptedException e) { + throw new RuntimeException(e); + } + ervuDirectoriesService.updateDirectories(); + } } From acbee1f44122f4ed89e9d65b4d91edf6f9aa047d Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 22 Apr 2025 14:56:47 +0300 Subject: [PATCH 22/25] SUPPORT-9129: Fix --- .../src/ts/modules/app/app-routing.module.ts | 5 - .../modules/mfe/mfe-webbpm-routing.module.ts | 2 +- .../modules/webbpm/webbpm-routing.module.ts | 2 +- .../main/resources/business-model/home.page | 94 ------------------- .../Список заявок.page | 38 -------- 5 files changed, 2 insertions(+), 139 deletions(-) delete mode 100644 resources/src/main/resources/business-model/home.page diff --git a/frontend/src/ts/modules/app/app-routing.module.ts b/frontend/src/ts/modules/app/app-routing.module.ts index 1d008617..412b5f9a 100644 --- a/frontend/src/ts/modules/app/app-routing.module.ts +++ b/frontend/src/ts/modules/app/app-routing.module.ts @@ -5,11 +5,6 @@ import {RolesGuard} from "./guard/RolesGuard"; const appRoutes: Routes = [ - { - path: 'home', - loadChildren: 'generated-sources/page-home.module#PagehomeModule', - canActivate: [ConfirmExitGuard, RolesGuard] - }, { path: 'app_list', loadChildren: 'generated-sources/page-app_list.module#Pageapp_listModule', diff --git a/frontend/src/ts/modules/mfe/mfe-webbpm-routing.module.ts b/frontend/src/ts/modules/mfe/mfe-webbpm-routing.module.ts index 571901bc..5e522405 100644 --- a/frontend/src/ts/modules/mfe/mfe-webbpm-routing.module.ts +++ b/frontend/src/ts/modules/mfe/mfe-webbpm-routing.module.ts @@ -13,7 +13,7 @@ const webbpmRoutes: Routes = [ }, { path: '', - loadChildren: 'generated-sources/page-home.module#PagehomeModule', + loadChildren: 'generated-sources/page-app_list.module#Pageapp_listModule', canActivate: [ConfirmExitGuard, RolesGuard], pathMatch: 'full', }, diff --git a/frontend/src/ts/modules/webbpm/webbpm-routing.module.ts b/frontend/src/ts/modules/webbpm/webbpm-routing.module.ts index 1ef36662..44d2bdf6 100644 --- a/frontend/src/ts/modules/webbpm/webbpm-routing.module.ts +++ b/frontend/src/ts/modules/webbpm/webbpm-routing.module.ts @@ -13,7 +13,7 @@ const webbpmRoutes: Routes = [ }, { path: '', - loadChildren: 'generated-sources/page-home.module#PagehomeModule', + loadChildren: 'generated-sources/page-app_list.module#Pageapp_listModule', canActivate: [ConfirmExitGuard, RolesGuard], pathMatch: 'full', }, diff --git a/resources/src/main/resources/business-model/home.page b/resources/src/main/resources/business-model/home.page deleted file mode 100644 index 4c037f0e..00000000 --- a/resources/src/main/resources/business-model/home.page +++ /dev/null @@ -1,94 +0,0 @@ - - - home - - 3.192.3 - - - ru.cg.webbpm.packages.base.resources - 3.192.3 - - - - - d7d54cfb-26b5-4dba-b56f-b6247183c24d - b0d8793f-51d3-49c2-b2d4-a6b4b6d8f037 - Hbox - true - false - - - - cssClasses - - - -"btn-big-group" - - - - - - - - - - - - 9d1b5af1-0b8f-4b1b-b9a5-c2e6acf72d91 - 240c9b7b-b6a5-40c9-82f3-c54924205a32 - Vbox - true - false - false - - - - - - - c8dfe691-a84a-48da-b79e-6298d90db71d - 5efb3252-df02-47da-8e3d-dc4517b3fc9f - Список пользователей - false - true - - - - 9d1b5af1-0b8f-4b1b-b9a5-c2e6acf72d91 - e8dc240c-e610-49c9-8f0e-df53dde5eff2 - Vbox - true - false - - - - - - - c8dfe691-a84a-48da-b79e-6298d90db71d - 5ace6303-ecf8-40a2-ad53-3dc08b46c1e0 - Список заявок - false - false - false - - - - caption - -"Список заявок" - - - - navigateTo - -"/app_list" - - - - - - - - diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Список заявок.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Список заявок.page index e7fe8de1..979bc307 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Список заявок.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Список заявок.page @@ -6002,44 +6002,6 @@ - - c8dfe691-a84a-48da-b79e-6298d90db71d - ed485923-da58-4370-8522-9b34be995953 - Выход - false - false - - true - - - - StaticRouteNavigationButton - modules.user-management.component - - true - true - - - caption - - "Выход" - - - - route - - "/home" - - - - visible - - true - - - - - 86f297f1-ab3d-40e0-ac2f-89cc944b7f0a From 99e001f13ba10c80904c1ba8d0f0fcd2d40331dd Mon Sep 17 00:00:00 2001 From: ilyin Date: Tue, 22 Apr 2025 16:59:27 +0300 Subject: [PATCH 23/25] UPPORT-9099 --- .../Обработка заявки на добавление пользователя.page | 43 ++++++++++++++++++- .../Обработка заявки на изменение пользователя.page | 43 ++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page index 151d955f..2864e236 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page @@ -4780,6 +4780,12 @@ false + + autoStretchColumns + + true + + parentControl @@ -4818,7 +4824,33 @@ - + + + + columnSorts + + + + + + field + + {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"date"} + + + + sortOrder + + "ASC" + + + + + + + + + 364c8faa-5e56-46cd-9203-d2ec6ef2dc74 ebf72c64-fee0-4ece-9b62-bb402072332c @@ -4846,6 +4878,15 @@ {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"date"} + + formatter + + + DateTimeFormatter + custom.grid.formatter + + + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page index 5cfbce13..0bc915a2 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page @@ -7606,6 +7606,12 @@ false + + autoStretchColumns + + true + + parentControl @@ -7644,7 +7650,33 @@ - + + + + columnSorts + + + + + + field + + {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"date"} + + + + sortOrder + + "ASC" + + + + + + + + + 364c8faa-5e56-46cd-9203-d2ec6ef2dc74 d4579764-d600-4331-80f2-1a1bf7128564 @@ -7672,6 +7704,15 @@ {"schema":"public","table":"user_application_list_audit","entity":"user_application_list_audit","name":"date"} + + formatter + + + DateTimeFormatter + custom.grid.formatter + + + From e80cf3d0c6c4752db939416795f4359007b724e7 Mon Sep 17 00:00:00 2001 From: ilyin Date: Tue, 22 Apr 2025 17:22:52 +0300 Subject: [PATCH 24/25] SUPPORT-9141 --- .../Обработка заявки на изменение пользователя.page | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page index 0bc915a2..a2de07c9 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page @@ -1741,19 +1741,6 @@ false - - style - - - - maxHeight - - "130px" - - - - - @@ -3054,19 +3041,6 @@ rowModelType "CLIENT_SIDE" - - - -style - - - - maxHeight - - "130px" - - - From fee4ad24d6edcb6f94cdfda9abc40aea429c05dc Mon Sep 17 00:00:00 2001 From: ilyin Date: Wed, 23 Apr 2025 09:56:45 +0300 Subject: [PATCH 25/25] margin_button --- .../Обработка заявки на изменение пользователя.page | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page index a2de07c9..98b53552 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на изменение пользователя.page @@ -8082,6 +8082,19 @@ true + + style + + + + margin + + "0px 0px 10px 0px" + + + + + @@ -9134,12 +9147,5 @@ - - d7d54cfb-26b5-4dba-b56f-b6247183c24d - 85ec8ffc-5684-43a5-8274-0dc08109c3e0 - Hbox_process_application - true - true -