From 86fdbb73dcd3d865bcecc3b7d096a9dada843e32 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Mon, 14 Apr 2025 11:59:41 +0300 Subject: [PATCH 1/3] SUPPORT-9099: Fix --- .../component/dao/AuditDao.java | 32 ++++++++++++ .../component/service/AuditFormDaoImpl.java | 52 +++++++++++++++++++ .../service/UserApplicationListService.java | 30 ++++++++++- .../v_1.0/20250411_SUPPORT-9099_add_audit.xml | 28 ++++++++++ .../resources/config/v_1.0/changelog-1.0.xml | 1 + 5 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.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..e618a162 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/component/dao/AuditDao.java @@ -0,0 +1,32 @@ +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; + +/** + * @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) {} + + 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/component/service/AuditFormDaoImpl.java b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java new file mode 100644 index 00000000..714baaf9 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AuditFormDaoImpl.java @@ -0,0 +1,52 @@ +package ru.micord.ervu.account_applications.component.service; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import dao.container.FormDaoImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.micord.ervu.account_applications.component.dao.AuditDao; +import ru.micord.ervu.account_applications.security.context.SecurityContext; +import ru.micord.ervu.account_applications.security.model.jwt.UserSession; + +import ru.cg.webbpm.modules.database.api.bean.TableFieldData; +import ru.cg.webbpm.modules.database.bean.entity_graph.EntityColumn; + +import static ru.micord.ervu.account_applications.enums.ApplicationStatus.SENT; + +/** + * @author Eduard Tihomirov + */ +@Service +public class AuditFormDaoImpl extends FormDaoImpl { + + @Autowired + private SecurityContext securityContext; + @Autowired + private AuditDao auditDao; + + @Override + public List save(Map map) { + List tableFieldData = this.saveDao.save(map); + UserSession userSession = securityContext.getUserSession(); + AtomicReference status = new AtomicReference<>(); + AtomicReference appListId = new AtomicReference<>(); + map.forEach((entityColumn, o) -> { + if (entityColumn.getName().equals("status")) { + status.set(o.toString()); + } + else if (entityColumn.getName().equals("id")) { + appListId.set((Long) o); + } + }); + if (status.get() != null && appListId.get() != null && !status.get().equals(SENT.name())) { + auditDao.insert(appListId.get(), userSession.name(), userSession.userId(), status.get(), Timestamp.valueOf( + LocalDateTime.now())); + } + return tableFieldData; + } +} 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 2101fddf..a387530d 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,9 +46,21 @@ public class UserApplicationListService { public void saveAcceptedStatus(String traceId) { dao.saveAcceptedStatus(traceId); + saveAuditStatusByTraceId(traceId, ACCEPTED.name()); } 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/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 12c4def9..ae5ac2e1 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 @@ -20,4 +20,5 @@ + From 461ffd320f50c6a9ffb2d624a5daae77350a3e52 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 15 Apr 2025 10:11:28 +0300 Subject: [PATCH 2/3] SUPPORT-9099: Fix --- .../component/dao/AuditDao.java | 12 +- .../component/service/AuditFormDaoImpl.java | 8 +- .../db_beans/public_/Public.java | 7 + .../db_beans/public_/Tables.java | 6 + .../tables/UserApplicationListAudit.java | 247 ++++++++++++++++++ .../UserApplicationListAuditRecord.java | 134 ++++++++++ .../Создание заявки на добавление пользователя.page | 4 + 7 files changed, 414 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java 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 index e618a162..c6baf9b9 100644 --- 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 @@ -6,7 +6,9 @@ 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 @@ -20,7 +22,15 @@ public class AuditDao { this.dslContext = dslContext; } - public void insert(Long listId, String fio, String login, String status, Timestamp timestamp) {} + 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) 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 714baaf9..5596e076 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 @@ -36,11 +36,13 @@ public class AuditFormDaoImpl extends FormDaoImpl { AtomicReference status = new AtomicReference<>(); AtomicReference appListId = new AtomicReference<>(); map.forEach((entityColumn, o) -> { - if (entityColumn.getName().equals("status")) { + if (entityColumn.getName().equals("application_status")) { status.set(o.toString()); } - else if (entityColumn.getName().equals("id")) { - appListId.set((Long) o); + }); + tableFieldData.forEach(data -> { + if (data.getField().getName().equals("user_application_list_id")) { + appListId.set((Long) data.getData()); } }); if (status.get() != null && appListId.get() != null && !status.get().equals(SENT.name())) { 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/db_beans/public_/tables/UserApplicationListAudit.java b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java new file mode 100644 index 00000000..97b4e5b5 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/UserApplicationListAudit.java @@ -0,0 +1,247 @@ +/* + * This file is generated by jOOQ. + */ +package ru.micord.ervu.account_applications.db_beans.public_.tables; + + +import java.sql.Timestamp; +import java.util.Collection; +import java.util.UUID; + +import org.jooq.Condition; +import org.jooq.Field; +import org.jooq.Identity; +import org.jooq.Name; +import org.jooq.PlainSQL; +import org.jooq.QueryPart; +import org.jooq.SQL; +import org.jooq.Schema; +import org.jooq.Select; +import org.jooq.Stringly; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.TableOptions; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.jooq.impl.TableImpl; + +import ru.micord.ervu.account_applications.db_beans.public_.Public; +import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationListAuditRecord; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class UserApplicationListAudit extends TableImpl { + + private static final long serialVersionUID = 1L; + + /** + * The reference instance of public.user_application_list_audit + */ + public static final UserApplicationListAudit USER_APPLICATION_LIST_AUDIT = new UserApplicationListAudit(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return UserApplicationListAuditRecord.class; + } + + /** + * The column public.user_application_list_audit.id. + */ + public final TableField ID = createField(DSL.name("id"), SQLDataType.UUID.nullable(false).defaultValue(DSL.field(DSL.raw("uuid_generate_v4()"), SQLDataType.UUID)), this, ""); + + /** + * The column + * public.user_application_list_audit.user_application_list_id. + */ + public final TableField USER_APPLICATION_LIST_ID = createField(DSL.name("user_application_list_id"), SQLDataType.BIGINT.nullable(false).identity(true), this, ""); + + /** + * The column public.user_application_list_audit.date. + */ + public final TableField DATE = createField(DSL.name("date"), SQLDataType.TIMESTAMP(0).defaultValue(DSL.field(DSL.raw("now()"), SQLDataType.TIMESTAMP)), this, ""); + + /** + * The column public.user_application_list_audit.status. + */ + public final TableField STATUS = createField(DSL.name("status"), SQLDataType.VARCHAR(100), this, ""); + + /** + * The column public.user_application_list_audit.fio. + */ + public final TableField FIO = createField(DSL.name("fio"), SQLDataType.VARCHAR(1000), this, ""); + + /** + * The column public.user_application_list_audit.login. + */ + public final TableField LOGIN = createField(DSL.name("login"), SQLDataType.VARCHAR(1000), this, ""); + + private UserApplicationListAudit(Name alias, Table aliased) { + this(alias, aliased, (Field[]) null, null); + } + + private UserApplicationListAudit(Name alias, Table aliased, Field[] parameters, Condition where) { + super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table(), where); + } + + /** + * Create an aliased public.user_application_list_audit table + * reference + */ + public UserApplicationListAudit(String alias) { + this(DSL.name(alias), USER_APPLICATION_LIST_AUDIT); + } + + /** + * Create an aliased public.user_application_list_audit table + * reference + */ + public UserApplicationListAudit(Name alias) { + this(alias, USER_APPLICATION_LIST_AUDIT); + } + + /** + * Create a public.user_application_list_audit table reference + */ + public UserApplicationListAudit() { + this(DSL.name("user_application_list_audit"), null); + } + + @Override + public Schema getSchema() { + return aliased() ? null : Public.PUBLIC; + } + + @Override + public Identity getIdentity() { + return (Identity) super.getIdentity(); + } + + @Override + public UserApplicationListAudit as(String alias) { + return new UserApplicationListAudit(DSL.name(alias), this); + } + + @Override + public UserApplicationListAudit as(Name alias) { + return new UserApplicationListAudit(alias, this); + } + + @Override + public UserApplicationListAudit as(Table alias) { + return new UserApplicationListAudit(alias.getQualifiedName(), this); + } + + /** + * Rename this table + */ + @Override + public UserApplicationListAudit rename(String name) { + return new UserApplicationListAudit(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public UserApplicationListAudit rename(Name name) { + return new UserApplicationListAudit(name, null); + } + + /** + * Rename this table + */ + @Override + public UserApplicationListAudit rename(Table name) { + return new UserApplicationListAudit(name.getQualifiedName(), null); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit where(Condition condition) { + return new UserApplicationListAudit(getQualifiedName(), aliased() ? this : null, null, condition); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit where(Collection conditions) { + return where(DSL.and(conditions)); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit where(Condition... conditions) { + return where(DSL.and(conditions)); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit where(Field condition) { + return where(DSL.condition(condition)); + } + + /** + * Create an inline derived table from this table + */ + @Override + @PlainSQL + public UserApplicationListAudit where(SQL condition) { + return where(DSL.condition(condition)); + } + + /** + * Create an inline derived table from this table + */ + @Override + @PlainSQL + public UserApplicationListAudit where(@Stringly.SQL String condition) { + return where(DSL.condition(condition)); + } + + /** + * Create an inline derived table from this table + */ + @Override + @PlainSQL + public UserApplicationListAudit where(@Stringly.SQL String condition, Object... binds) { + return where(DSL.condition(condition, binds)); + } + + /** + * Create an inline derived table from this table + */ + @Override + @PlainSQL + public UserApplicationListAudit where(@Stringly.SQL String condition, QueryPart... parts) { + return where(DSL.condition(condition, parts)); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit whereExists(Select select) { + return where(DSL.exists(select)); + } + + /** + * Create an inline derived table from this table + */ + @Override + public UserApplicationListAudit whereNotExists(Select select) { + return where(DSL.notExists(select)); + } +} 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 new file mode 100644 index 00000000..a51eb638 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/db_beans/public_/tables/records/UserApplicationListAuditRecord.java @@ -0,0 +1,134 @@ +/* + * This file is generated by jOOQ. + */ +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 ru.micord.ervu.account_applications.db_beans.public_.tables.UserApplicationListAudit; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class UserApplicationListAuditRecord extends TableRecordImpl { + + private static final long serialVersionUID = 1L; + + /** + * Setter for public.user_application_list_audit.id. + */ + public void setId(UUID value) { + set(0, value); + } + + /** + * Getter for public.user_application_list_audit.id. + */ + public UUID getId() { + return (UUID) get(0); + } + + /** + * Setter for + * public.user_application_list_audit.user_application_list_id. + */ + public void setUserApplicationListId(Long value) { + set(1, value); + } + + /** + * Getter for + * public.user_application_list_audit.user_application_list_id. + */ + public Long getUserApplicationListId() { + return (Long) get(1); + } + + /** + * Setter for public.user_application_list_audit.date. + */ + public void setDate(Timestamp value) { + set(2, value); + } + + /** + * Getter for public.user_application_list_audit.date. + */ + public Timestamp getDate() { + return (Timestamp) get(2); + } + + /** + * Setter for public.user_application_list_audit.status. + */ + public void setStatus(String value) { + set(3, value); + } + + /** + * Getter for public.user_application_list_audit.status. + */ + public String getStatus() { + return (String) get(3); + } + + /** + * Setter for public.user_application_list_audit.fio. + */ + public void setFio(String value) { + set(4, value); + } + + /** + * Getter for public.user_application_list_audit.fio. + */ + public String getFio() { + return (String) get(4); + } + + /** + * Setter for public.user_application_list_audit.login. + */ + public void setLogin(String value) { + set(5, value); + } + + /** + * Getter for public.user_application_list_audit.login. + */ + public String getLogin() { + return (String) get(5); + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached UserApplicationListAuditRecord + */ + public UserApplicationListAuditRecord() { + super(UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT); + } + + /** + * Create a detached, initialised UserApplicationListAuditRecord + */ + public UserApplicationListAuditRecord(UUID id, Long userApplicationListId, Timestamp date, String status, String fio, String login) { + super(UserApplicationListAudit.USER_APPLICATION_LIST_AUDIT); + + setId(id); + setUserApplicationListId(userApplicationListId); + setDate(date); + setStatus(status); + setFio(fio); + setLogin(login); + resetChangedOnNotNull(); + } +} 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 From de707ee81e680cfe85aad10780855da23e819f27 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 15 Apr 2025 11:22:43 +0300 Subject: [PATCH 3/3] SUPPORT-9099: Fix --- .../component/service/AuditFormDaoImpl.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) 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 5596e076..3ebe7b0b 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 @@ -4,6 +4,7 @@ import java.sql.Timestamp; 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; @@ -31,21 +32,18 @@ public class AuditFormDaoImpl extends FormDaoImpl { @Override public List save(Map map) { - List tableFieldData = this.saveDao.save(map); + List tableFieldData = super.save(map); UserSession userSession = securityContext.getUserSession(); - AtomicReference status = new AtomicReference<>(); - AtomicReference appListId = new AtomicReference<>(); - map.forEach((entityColumn, o) -> { - if (entityColumn.getName().equals("application_status")) { - status.set(o.toString()); - } - }); - tableFieldData.forEach(data -> { - if (data.getField().getName().equals("user_application_list_id")) { - appListId.set((Long) data.getData()); - } - }); - if (status.get() != null && appListId.get() != null && !status.get().equals(SENT.name())) { + Optional status = map.entrySet().stream() + .filter(entry -> entry.getKey().getName().equals("application_status")) + .map(entry -> entry.getValue().toString()) + .findAny(); + + Optional appListId = tableFieldData.stream() + .filter(data -> data.getField().getName().equals("user_application_list_id")) + .map(data -> (Long) data.getData()) + .findAny(); + if (status.isPresent() && appListId.isPresent() && !status.get().equals(SENT.name())) { auditDao.insert(appListId.get(), userSession.name(), userSession.userId(), status.get(), Timestamp.valueOf( LocalDateTime.now())); }