public.excerpt_history.
+ */
+ public final ExcerptHistory EXCERPT_HISTORY = ExcerptHistory.EXCERPT_HISTORY;
+
/**
* The table public.interaction_log.
*/
@@ -81,6 +87,7 @@ public class Public extends SchemaImpl {
return Arrays.asList(
Databasechangelog.DATABASECHANGELOG,
Databasechangeloglock.DATABASECHANGELOGLOCK,
+ ExcerptHistory.EXCERPT_HISTORY,
InteractionLog.INTERACTION_LOG,
OkopfRecords.OKOPF_RECORDS,
OrganizationAllowed.ORGANIZATION_ALLOWED,
diff --git a/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/Tables.java b/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/Tables.java
index 37305e26..84486edb 100644
--- a/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/Tables.java
+++ b/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/Tables.java
@@ -6,6 +6,7 @@ package ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.Databasechangelog;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.Databasechangeloglock;
+import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.ExcerptHistory;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.InteractionLog;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.OkopfRecords;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.OrganizationAllowed;
@@ -28,6 +29,11 @@ public class Tables {
*/
public static final Databasechangeloglock DATABASECHANGELOGLOCK = Databasechangeloglock.DATABASECHANGELOGLOCK;
+ /**
+ * The table public.excerpt_history.
+ */
+ public static final ExcerptHistory EXCERPT_HISTORY = ExcerptHistory.EXCERPT_HISTORY;
+
/**
* The table public.interaction_log.
*/
diff --git a/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/tables/ExcerptHistory.java b/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/tables/ExcerptHistory.java
new file mode 100644
index 00000000..81c89535
--- /dev/null
+++ b/backend/src/main/java/ervu_lkrp_ul/ervu_lkrp_ul/db_beans/public_/tables/ExcerptHistory.java
@@ -0,0 +1,243 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables;
+
+
+import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.Public;
+import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.ExcerptHistoryRecord;
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+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;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class ExcerptHistory extends TableImplpublic.excerpt_history
+ */
+ public static final ExcerptHistory EXCERPT_HISTORY = new ExcerptHistory();
+
+ /**
+ * The class holding records for this type
+ */
+ @Override
+ public Classpublic.excerpt_history.id.
+ */
+ public final TableFieldpublic.excerpt_history.ervu_id.
+ */
+ public final TableFieldpublic.excerpt_history.prn_oid.
+ */
+ public final TableFieldpublic.excerpt_history.url.
+ */
+ public final TableFieldpublic.excerpt_history.datetime.
+ */
+ public final TableFieldpublic.excerpt_history.status.
+ */
+ public final TableFieldpublic.excerpt_history table reference
+ */
+ public ExcerptHistory(String alias) {
+ this(DSL.name(alias), EXCERPT_HISTORY);
+ }
+
+ /**
+ * Create an aliased public.excerpt_history table reference
+ */
+ public ExcerptHistory(Name alias) {
+ this(alias, EXCERPT_HISTORY);
+ }
+
+ /**
+ * Create a public.excerpt_history table reference
+ */
+ public ExcerptHistory() {
+ this(DSL.name("excerpt_history"), null);
+ }
+
+ @Override
+ public Schema getSchema() {
+ return aliased() ? null : Public.PUBLIC;
+ }
+
+ @Override
+ public Identitypublic.excerpt_history.id.
+ */
+ public void setId(Long value) {
+ set(0, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.id.
+ */
+ public Long getId() {
+ return (Long) get(0);
+ }
+
+ /**
+ * Setter for public.excerpt_history.ervu_id.
+ */
+ public void setErvuId(String value) {
+ set(1, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.ervu_id.
+ */
+ public String getErvuId() {
+ return (String) get(1);
+ }
+
+ /**
+ * Setter for public.excerpt_history.prn_oid.
+ */
+ public void setPrnOid(String value) {
+ set(2, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.prn_oid.
+ */
+ public String getPrnOid() {
+ return (String) get(2);
+ }
+
+ /**
+ * Setter for public.excerpt_history.url.
+ */
+ public void setUrl(String value) {
+ set(3, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.url.
+ */
+ public String getUrl() {
+ return (String) get(3);
+ }
+
+ /**
+ * Setter for public.excerpt_history.datetime.
+ */
+ public void setDatetime(Timestamp value) {
+ set(4, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.datetime.
+ */
+ public Timestamp getDatetime() {
+ return (Timestamp) get(4);
+ }
+
+ /**
+ * Setter for public.excerpt_history.status.
+ */
+ public void setStatus(String value) {
+ set(5, value);
+ }
+
+ /**
+ * Getter for public.excerpt_history.status.
+ */
+ public String getStatus() {
+ return (String) get(5);
+ }
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+
+ /**
+ * Create a detached ExcerptHistoryRecord
+ */
+ public ExcerptHistoryRecord() {
+ super(ExcerptHistory.EXCERPT_HISTORY);
+ }
+
+ /**
+ * Create a detached, initialised ExcerptHistoryRecord
+ */
+ public ExcerptHistoryRecord(Long id, String ervuId, String prnOid, String url, Timestamp datetime, String status) {
+ super(ExcerptHistory.EXCERPT_HISTORY);
+
+ setId(id);
+ setErvuId(ervuId);
+ setPrnOid(prnOid);
+ setUrl(url);
+ setDatetime(datetime);
+ setStatus(status);
+ resetChangedOnNotNull();
+ }
+}
diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/AuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/AuditService.java
index fec9091c..dec01cc4 100644
--- a/backend/src/main/java/ru/micord/ervu/audit/service/AuditService.java
+++ b/backend/src/main/java/ru/micord/ervu/audit/service/AuditService.java
@@ -6,6 +6,8 @@ import ervu.model.fileupload.FileInfo;
import ervu.model.fileupload.FileStatus;
import ervu.model.fileupload.UploadOrgInfo;
import ru.micord.ervu.audit.model.AuditActionRequest;
+import ru.micord.ervu.kafka.model.ExcerptData;
+import ru.micord.ervu.kafka.model.ExcerptResponse;
import ru.micord.ervu.kafka.model.OrgInfo;
/**
@@ -21,4 +23,7 @@ public interface AuditService {
void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
int formatRegistry, String status, String s3FileUrl);
+
+ void processDownloadEvent(ExcerptData data, long fileSize, String fileName,
+ int formatRegistry, String status, String s3FileUrl);
}
diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java
index 40aad7a8..9a2a1aa0 100644
--- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java
+++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java
@@ -20,6 +20,9 @@ import ru.micord.ervu.audit.model.*;
import ru.micord.ervu.audit.service.AuditKafkaPublisher;
import ru.micord.ervu.audit.service.AuditService;
import ru.micord.ervu.exception.JsonParsingException;
+import ru.micord.ervu.kafka.model.Data;
+import ru.micord.ervu.kafka.model.ExcerptData;
+import ru.micord.ervu.kafka.model.ExcerptResponse;
import ru.micord.ervu.kafka.model.OrgInfo;
import ru.micord.ervu.security.esia.model.EsiaAccessToken;
import ru.micord.ervu.security.esia.service.UlDataService;
@@ -123,15 +126,29 @@ public class BaseAuditService implements AuditService {
}
@Override
- public void processDownloadEvent(
- HttpServletRequest request, long fileSize, String fileName, int formatRegistry,
- String status, String s3FileUrl) {
+ public void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
+ int formatRegistry, String status, String s3FileUrl) {
String userAccountId = jwtTokenService.getUserAccountId(request);
+ String eventTime = DateUtils.getClientDateTimeWithZone(
+ DateUtils.getClientDateTimeWithZoneFromRequest(request));
+ publishDownloadEvent(getEsiaOrgId(request), userAccountId, eventTime, fileSize, fileName,
+ formatRegistry, status, s3FileUrl);
+ }
+ @Override
+ public void processDownloadEvent(ExcerptData data, long fileSize, String fileName,
+ int formatRegistry,String status, String s3FileUrl) {
+ String eventTime = DateUtils.getClientDateTimeWithZone(data.getTimeZone());
+ publishDownloadEvent(data.getOrgId(), data.getPrnOid(), eventTime, fileSize, fileName,
+ formatRegistry, status, s3FileUrl);
+ }
+
+ private void publishDownloadEvent(String esiaOrgId, String esiaPersonId, String eventTime,
+ long fileSize, String fileName, int formatRegistry, String status, String s3FileUrl) {
AuditDownloadEvent event = new AuditDownloadEvent(
- getEsiaOrgId(request),
- userAccountId,
- DateUtils.getClientDateTimeWithZoneFromRequest(request),
+ esiaOrgId,
+ esiaPersonId,
+ eventTime,
AuditConstants.getDownloadType(formatRegistry),
fileName,
s3FileUrl,
diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/StubAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/StubAuditService.java
index ca82cab4..48fd927d 100644
--- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/StubAuditService.java
+++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/StubAuditService.java
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import ru.micord.ervu.audit.config.AuditDisableCondition;
import ru.micord.ervu.audit.model.AuditActionRequest;
import ru.micord.ervu.audit.service.AuditService;
+import ru.micord.ervu.kafka.model.ExcerptData;
import ru.micord.ervu.kafka.model.OrgInfo;
/**
@@ -32,4 +33,8 @@ public class StubAuditService implements AuditService {
@Override
public void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
int formatRegistry, String status, String s3FileUrl) {}
+
+ @Override
+ public void processDownloadEvent(ExcerptData data, long fileSize, String fileName, int formatRegistry,
+ String status, String s3FileUrl) {}
}
diff --git a/backend/src/main/java/ru/micord/ervu/controller/ExcerptController.java b/backend/src/main/java/ru/micord/ervu/controller/ExcerptController.java
new file mode 100644
index 00000000..1126976c
--- /dev/null
+++ b/backend/src/main/java/ru/micord/ervu/controller/ExcerptController.java
@@ -0,0 +1,140 @@
+package ru.micord.ervu.controller;
+
+import java.nio.charset.StandardCharsets;
+import java.time.ZonedDateTime;
+import java.util.Optional;
+import java.util.TimeZone;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import ervu.client.fileupload.WebDavClient;
+import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.ExcerptHistoryRecord;
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import ru.micord.ervu.audit.constants.AuditConstants;
+import ru.micord.ervu.audit.service.AuditService;
+import ru.micord.ervu.dao.ExcerptHistoryDao;
+import ru.micord.ervu.kafka.exception.ExcerptException;
+import ru.micord.ervu.kafka.model.Data;
+import ru.micord.ervu.security.webbpm.jwt.UserIdsPair;
+import ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil;
+import ru.micord.ervu.util.UrlUtils;
+
+/**
+ * @author Eduard Tihomirov
+ */
+@RestController
+@RequestMapping("/excerpt")
+public class ExcerptController {
+
+ @Autowired
+ @Qualifier("fileTemplate")
+ private KafkaTemplate