diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json
index c279998d..de1eb115 100644
--- a/descriptors/ModuleDescriptor-template.json
+++ b/descriptors/ModuleDescriptor-template.json
@@ -227,6 +227,56 @@
"users.item.post",
"users.item.put"
]
+ },
+ {
+ "methods": [
+ "GET"
+ ],
+ "pathPattern": "/data-export-spring/job-deletion-intervals",
+ "permissionsRequired": [
+ "data-export.job-deletion-intervals.collection.get"
+ ],
+ "modulePermissions": []
+ },
+ {
+ "methods": [
+ "GET"
+ ],
+ "pathPattern": "/data-export-spring/job-deletion-intervals/{exportType}",
+ "permissionsRequired": [
+ "data-export.job-deletion-intervals.item.get"
+ ],
+ "modulePermissions": []
+ },
+ {
+ "methods": [
+ "POST"
+ ],
+ "pathPattern": "/data-export-spring/job-deletion-intervals",
+ "permissionsRequired": [
+ "data-export.job-deletion-intervals.item.post"
+ ],
+ "modulePermissions": []
+ },
+ {
+ "methods": [
+ "PUT"
+ ],
+ "pathPattern": "/data-export-spring/job-deletion-intervals/{exportType}",
+ "permissionsRequired": [
+ "data-export.job-deletion-intervals.item.put"
+ ],
+ "modulePermissions": []
+ },
+ {
+ "methods": [
+ "DELETE"
+ ],
+ "pathPattern": "/data-export-spring/job-deletion-intervals/{exportType}",
+ "permissionsRequired": [
+ "data-export.job-deletion-intervals.item.delete"
+ ],
+ "modulePermissions": []
}
]
},
@@ -377,6 +427,43 @@
"orders-storage.purchase-orders.collection.get",
"orders-storage.pieces.collection.get"
]
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.collection.get",
+ "displayName": "Get job deletion intervals",
+ "description": "Get job deletion intervals"
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.item.get",
+ "displayName": "Get job deletion interval",
+ "description": "Get job deletion interval by export type"
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.item.post",
+ "displayName": "Create/update job deletion interval",
+ "description": "Create/update job deletion interval"
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.item.put",
+ "displayName": "Update job deletion interval",
+ "description": "Update job deletion interval"
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.item.delete",
+ "displayName": "Delete job deletion interval",
+ "description": "Delete job deletion interval"
+ },
+ {
+ "permissionName": "data-export.job-deletion-intervals.all",
+ "displayName": "Job deletion intervals - all permissions",
+ "description": "All permissions for job deletion intervals",
+ "subPermissions": [
+ "data-export.job-deletion-intervals.collection.get",
+ "data-export.job-deletion-intervals.item.get",
+ "data-export.job-deletion-intervals.item.post",
+ "data-export.job-deletion-intervals.item.put",
+ "data-export.job-deletion-intervals.item.delete"
+ ]
}
],
"metadata": {
diff --git a/folio-export-common b/folio-export-common
index 70934167..b1e667c8 160000
--- a/folio-export-common
+++ b/folio-export-common
@@ -1 +1 @@
-Subproject commit 7093416702cf2d97513fdea5cb80cfda157416fa
+Subproject commit b1e667c83f0f1746740900a31db52f6d1d806a7c
diff --git a/pom.xml b/pom.xml
index 52d5d9c6..496dbdc0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,8 +31,8 @@
UTF-8
${project.basedir}/src/main/resources/swagger.api/jobs.yaml
- ${project.basedir}/src/main/resources/swagger.api/export-configs.yaml
-
+ ${project.basedir}/src/main/resources/swagger.api/export-configs.yaml
+ ${project.basedir}/src/main/resources/swagger.api/job-deletion-intervals.yaml
9.0.0
4.1.1
@@ -397,6 +397,36 @@
+
+ job-deletion-intervals
+
+ generate
+
+
+ ${job-deletion-intervals.yaml.file}
+
+ spring
+ ${project.groupId}.des.domain.dto.delete_interval
+ ${project.groupId}.des.rest.resource
+ true
+ true
+ true
+ true
+ false
+ true
+ ApiUtil.java
+ true
+
+ ExportType=org.folio.des.domain.dto.ExportType
+
+
+ true
+ java8-localdatetime
+ true
+ true
+
+
+
diff --git a/src/main/java/org/folio/de/entity/JobDeletionIntervalEntity.java b/src/main/java/org/folio/de/entity/JobDeletionIntervalEntity.java
new file mode 100644
index 00000000..e6d75133
--- /dev/null
+++ b/src/main/java/org/folio/de/entity/JobDeletionIntervalEntity.java
@@ -0,0 +1,38 @@
+package org.folio.de.entity;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.Data;
+import org.folio.des.domain.dto.ExportType;
+
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+@Entity
+@Table(name = "job_deletion_interval")
+@Data
+public class JobDeletionIntervalEntity {
+ @Id
+ @Enumerated(EnumType.STRING)
+ @Column(name = "export_type")
+ private ExportType exportType;
+
+ @Column(name = "retention_days", nullable = false)
+ private Integer retentionDays;
+
+ @Column(name = "created_date", nullable = false)
+ private LocalDateTime createdDate;
+
+ @Column(name = "created_by", nullable = false)
+ private UUID createdBy;
+
+ @Column(name = "updated_date")
+ private LocalDateTime updatedDate;
+
+ @Column(name = "updated_by")
+ private UUID updatedBy;
+}
diff --git a/src/main/java/org/folio/des/controller/JobDeletionIntervalController.java b/src/main/java/org/folio/des/controller/JobDeletionIntervalController.java
new file mode 100644
index 00000000..18308ceb
--- /dev/null
+++ b/src/main/java/org/folio/des/controller/JobDeletionIntervalController.java
@@ -0,0 +1,49 @@
+package org.folio.des.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.folio.des.domain.dto.ExportType;
+import org.folio.des.domain.dto.delete_interval.JobDeletionInterval;
+import org.folio.des.domain.dto.delete_interval.JobDeletionIntervalCollection;
+import org.folio.des.rest.resource.JobDeletionIntervalsApi;
+import org.folio.des.service.JobDeletionIntervalService;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/data-export-spring")
+@RequiredArgsConstructor
+public class JobDeletionIntervalController implements JobDeletionIntervalsApi {
+ private final JobDeletionIntervalService service;
+
+ @Override
+ public ResponseEntity getAllJobDeletionIntervals() {
+ var intervals = service.getAll();
+ return ResponseEntity.ok(intervals);
+ }
+
+ @Override
+ public ResponseEntity getJobDeletionIntervalByExportType(ExportType exportType) {
+ return ResponseEntity.ok(service.get(exportType));
+ }
+
+ @Override
+ public ResponseEntity createJobDeletionInterval(JobDeletionInterval interval) {
+ return ResponseEntity
+ .status(HttpStatus.CREATED)
+ .body(service.create(interval));
+ }
+
+ @Override
+ public ResponseEntity updateJobDeletionInterval(ExportType exportType, JobDeletionInterval interval) {
+ interval.setExportType(exportType);
+ return ResponseEntity.ok(service.update(interval));
+ }
+
+ @Override
+ public ResponseEntity deleteJobDeletionInterval(ExportType exportType) {
+ service.delete(exportType);
+ return ResponseEntity.noContent().build();
+ }
+}
diff --git a/src/main/java/org/folio/des/repository/JobDataExportRepository.java b/src/main/java/org/folio/des/repository/JobDataExportRepository.java
index 67143373..6652bf02 100644
--- a/src/main/java/org/folio/des/repository/JobDataExportRepository.java
+++ b/src/main/java/org/folio/des/repository/JobDataExportRepository.java
@@ -1,6 +1,7 @@
package org.folio.des.repository;
import org.folio.de.entity.Job;
+import org.folio.des.domain.dto.ExportType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
@@ -13,6 +14,6 @@ public interface JobDataExportRepository extends JpaRepository {
@Query(value = "SELECT nextval('job-number')", nativeQuery = true)
Integer getNextJobNumber();
- List findByUpdatedDateBefore(Date updatedDate);
+ List findByTypeAndUpdatedDateBefore(ExportType type, Date updatedDate);
}
diff --git a/src/main/java/org/folio/des/repository/JobDeletionIntervalRepository.java b/src/main/java/org/folio/des/repository/JobDeletionIntervalRepository.java
new file mode 100644
index 00000000..3770d9e6
--- /dev/null
+++ b/src/main/java/org/folio/des/repository/JobDeletionIntervalRepository.java
@@ -0,0 +1,10 @@
+package org.folio.des.repository;
+
+import org.folio.de.entity.JobDeletionIntervalEntity;
+import org.folio.des.domain.dto.ExportType;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface JobDeletionIntervalRepository extends JpaRepository {
+}
diff --git a/src/main/java/org/folio/des/service/FolioTenantService.java b/src/main/java/org/folio/des/service/FolioTenantService.java
index 09284206..ca743fa0 100644
--- a/src/main/java/org/folio/des/service/FolioTenantService.java
+++ b/src/main/java/org/folio/des/service/FolioTenantService.java
@@ -7,7 +7,6 @@
import org.folio.des.scheduling.quartz.ScheduledJobsRemover;
import org.folio.des.service.bursarlegacy.BursarExportLegacyJobService;
import org.folio.des.service.bursarlegacy.BursarMigrationService;
-import org.folio.des.service.config.BulkEditConfigService;
import org.folio.des.service.config.impl.BursarFeesFinesExportConfigService;
import org.folio.spring.FolioExecutionContext;
import org.folio.spring.liquibase.FolioSpringLiquibase;
@@ -26,7 +25,6 @@
public class FolioTenantService extends TenantService {
private final KafkaService kafka;
- private final BulkEditConfigService bulkEditConfigService;
private final EdifactScheduledJobInitializer edifactScheduledJobInitializer;
private final ScheduledJobsRemover scheduledJobsRemover;
private final BursarScheduledJobInitializer bursarScheduledJobInitializer;
@@ -38,7 +36,7 @@ public class FolioTenantService extends TenantService {
private final BursarFeesFinesExportConfigService bursarFeesFinesExportConfigService;
public FolioTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext context, FolioSpringLiquibase folioSpringLiquibase,
- PrepareSystemUserService prepareSystemUserService, KafkaService kafka, BulkEditConfigService bulkEditConfigService,
+ PrepareSystemUserService prepareSystemUserService, KafkaService kafka,
EdifactScheduledJobInitializer edifactScheduledJobInitializer, ScheduledJobsRemover scheduledJobsRemover,
BursarScheduledJobInitializer bursarScheduledJobInitializer, OldJobDeleteScheduler oldJobDeleteScheduler,
BursarExportLegacyJobService bursarExportLegacyJobService, JobService jobService,
@@ -46,7 +44,6 @@ public FolioTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext conte
super(jdbcTemplate, context, folioSpringLiquibase);
this.prepareSystemUserService = prepareSystemUserService;
this.kafka = kafka;
- this.bulkEditConfigService = bulkEditConfigService;
this.edifactScheduledJobInitializer = edifactScheduledJobInitializer;
this.scheduledJobsRemover = scheduledJobsRemover;
this.bursarScheduledJobInitializer = bursarScheduledJobInitializer;
@@ -64,7 +61,6 @@ protected void afterTenantUpdate(TenantAttributes tenantAttributes) {
bursarMigrationService.updateLegacyBursarIfNeeded(tenantAttributes, bursarFeesFinesExportConfigService,
bursarExportLegacyJobService, jobService);
bursarScheduledJobInitializer.initAllScheduledJob(tenantAttributes);
- bulkEditConfigService.checkBulkEditConfiguration();
edifactScheduledJobInitializer.initAllScheduledJob(tenantAttributes);
oldJobDeleteScheduler.scheduleOldJobDeletion(context.getTenantId());
kafka.createKafkaTopics();
diff --git a/src/main/java/org/folio/des/service/JobDeletionIntervalService.java b/src/main/java/org/folio/des/service/JobDeletionIntervalService.java
new file mode 100644
index 00000000..783b4a14
--- /dev/null
+++ b/src/main/java/org/folio/des/service/JobDeletionIntervalService.java
@@ -0,0 +1,45 @@
+package org.folio.des.service;
+
+import org.folio.des.domain.dto.ExportType;
+import org.folio.des.domain.dto.delete_interval.JobDeletionInterval;
+import org.folio.des.domain.dto.delete_interval.JobDeletionIntervalCollection;
+
+public interface JobDeletionIntervalService {
+ /**
+ * Get all job deletion intervals.
+ *
+ * @return collection of job deletion intervals
+ */
+ JobDeletionIntervalCollection getAll();
+
+ /**
+ * Get interval by export type.
+ *
+ * @param exportType the export type to retrieve
+ * @return the found job deletion interval
+ */
+ JobDeletionInterval get(ExportType exportType);
+
+ /**
+ * Create a new job deletion interval.
+ *
+ * @param interval the interval to create
+ * @return the created interval
+ */
+ JobDeletionInterval create(JobDeletionInterval interval);
+
+ /**
+ * Update an existing job deletion interval.
+ *
+ * @param interval the interval to update
+ * @return the updated interval
+ */
+ JobDeletionInterval update(JobDeletionInterval interval);
+
+ /**
+ * Delete a job deletion interval.
+ *
+ * @param exportType the export type to delete
+ */
+ void delete(ExportType exportType);
+}
diff --git a/src/main/java/org/folio/des/service/config/BulkEditConfigService.java b/src/main/java/org/folio/des/service/config/BulkEditConfigService.java
deleted file mode 100644
index 8596e162..00000000
--- a/src/main/java/org/folio/des/service/config/BulkEditConfigService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.folio.des.service.config;
-
-import static org.folio.des.util.BulkEditConstants.BULK_EDIT_CONFIGURATIONS_QUERY_TEMPLATE;
-import static org.folio.des.util.BulkEditConstants.CONFIG_NAME;
-import static org.folio.des.util.BulkEditConstants.DEFAULT_BULK_EDIT_JOB_EXPIRATION_PERIOD;
-import static org.folio.des.util.BulkEditConstants.EXPIRATION_PERIOD_PARAMETER;
-import static org.folio.des.util.BulkEditConstants.JOB_EXPIRATION_PERIOD;
-import static org.folio.des.util.BulkEditConstants.MODULE_NAME;
-
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.log4j.Log4j2;
-import org.folio.des.client.ConfigurationClient;
-import org.folio.des.domain.dto.ConfigurationCollection;
-import org.folio.des.domain.dto.ModelConfiguration;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.Map;
-
-@Service
-@Log4j2
-@RequiredArgsConstructor
-public class BulkEditConfigService {
- private final ConfigurationClient configurationClient;
-
- public ConfigurationCollection getBulkEditConfigurations(Integer limit) {
- return configurationClient.getConfigurations(String.format(BULK_EDIT_CONFIGURATIONS_QUERY_TEMPLATE, MODULE_NAME, CONFIG_NAME), limit);
- }
-
- @SneakyThrows
- public int getBulkEditJobExpirationPeriod() {
- var configs = getBulkEditConfigurations(1);
- if (!configs.getConfigs().isEmpty()) {
- var config = configs.getConfigs().get(0);
- log.info("Found bulk-edit configuration: {}", config);
- var bulkEditConfig = new ObjectMapper().readValue(config.getValue(), new TypeReference