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