-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'mdexp-spring' into MDEXP-686
- Loading branch information
Showing
25 changed files
with
457 additions
and
248 deletions.
There are no files selected for viewing
28 changes: 28 additions & 0 deletions
28
src/main/java/org/folio/dataexp/controllers/QuickExportController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package org.folio.dataexp.controllers; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.log4j.Log4j2; | ||
import org.folio.dataexp.domain.dto.QuickExportRequest; | ||
import org.folio.dataexp.domain.dto.QuickExportResponse; | ||
import org.folio.dataexp.rest.resource.QuickExportApi; | ||
import org.folio.dataexp.service.QuickExportService; | ||
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 | ||
@RequiredArgsConstructor | ||
@Log4j2 | ||
@RequestMapping("/data-export") | ||
public class QuickExportController implements QuickExportApi { | ||
|
||
private final QuickExportService quickExportService; | ||
|
||
@Override | ||
public ResponseEntity<QuickExportResponse> postDataExportQuickExport(QuickExportRequest quickExportRequest) { | ||
var response = quickExportService.postQuickExport(quickExportRequest); | ||
log.info("Quick export response: {}", response); | ||
return new ResponseEntity<>(response, HttpStatus.OK); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
src/main/java/org/folio/dataexp/service/QuickExportService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package org.folio.dataexp.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.log4j.Log4j2; | ||
import org.folio.dataexp.domain.dto.ExportRequest; | ||
import org.folio.dataexp.domain.dto.FileDefinition; | ||
import org.folio.dataexp.domain.dto.QuickExportRequest; | ||
import org.folio.dataexp.domain.dto.QuickExportResponse; | ||
import org.folio.dataexp.domain.entity.ExportIdEntity; | ||
import org.folio.dataexp.exception.export.DataExportRequestValidationException; | ||
import org.folio.dataexp.repository.ExportIdEntityRepository; | ||
import org.folio.dataexp.repository.JobProfileEntityRepository; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.ArrayList; | ||
import java.util.UUID; | ||
|
||
import static java.util.Objects.nonNull; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Log4j2 | ||
public class QuickExportService { | ||
|
||
private final FileDefinitionsService fileDefinitionsService; | ||
private final DataExportService dataExportService; | ||
private final JobProfileEntityRepository jobProfileEntityRepository; | ||
private final ExportIdEntityRepository exportIdEntityRepository; | ||
private final JobExecutionService jobExecutionService; | ||
|
||
public QuickExportResponse postQuickExport(QuickExportRequest quickExportRequest) { | ||
var fileDefinition = new FileDefinition().id(UUID.randomUUID()).size(0).fileName("quick-export.csv"); | ||
fileDefinitionsService.postFileDefinition(fileDefinition); | ||
log.info("Post quick export for job profile {}", quickExportRequest.getJobProfileId()); | ||
dataExportService.postDataExport(getExportRequestFromQuickExportRequest(quickExportRequest, fileDefinition)); | ||
var jobExecution = jobExecutionService.getById(fileDefinition.getJobExecutionId()); | ||
return QuickExportResponse.builder().jobExecutionId(fileDefinition.getJobExecutionId()) | ||
.jobExecutionHrId(jobExecution.getHrId()).build(); | ||
} | ||
|
||
private ExportRequest getExportRequestFromQuickExportRequest(QuickExportRequest quickExportRequest, FileDefinition fileDefinition) { | ||
var exportRequest = new ExportRequest(); | ||
saveBatch(quickExportRequest, fileDefinition); | ||
exportRequest.setJobProfileId(getDefaultJobProfileId(quickExportRequest)); | ||
exportRequest.setRecordType(ExportRequest.RecordTypeEnum.fromValue(quickExportRequest.getRecordType().getValue())); | ||
exportRequest.setFileDefinitionId(fileDefinition.getId()); | ||
exportRequest.setQuick(true); | ||
exportRequest.setIdType(ExportRequest.IdTypeEnum.fromValue(quickExportRequest.getRecordType().getValue().toLowerCase())); | ||
return exportRequest; | ||
} | ||
|
||
private void saveBatch(QuickExportRequest quickExportRequest, FileDefinition fileDefinition) { | ||
var uuids = quickExportRequest.getUuids(); | ||
if (nonNull(uuids)) { | ||
var batch = new ArrayList<ExportIdEntity>(); | ||
uuids.forEach(instanceId -> { | ||
var entity = ExportIdEntity.builder().jobExecutionId(fileDefinition | ||
.getJobExecutionId()).instanceId(instanceId).build(); | ||
batch.add(entity); | ||
}); | ||
exportIdEntityRepository.saveAll(batch); | ||
} else { | ||
log.error("Nothing to export for fileDefinitionId {}: no uuids provided.", fileDefinition.getId()); | ||
} | ||
} | ||
|
||
private UUID getDefaultJobProfileId(QuickExportRequest quickExportRequest) { | ||
var ids = jobProfileEntityRepository.findIdOfDefaultJobProfileByName(quickExportRequest.getRecordType().getValue().toLowerCase()); | ||
if (ids.isEmpty()) { | ||
log.error("No default job profile found by the following recordType: {}", quickExportRequest.getRecordType()); | ||
throw new DataExportRequestValidationException("No default job profile found by the following recordType: " + quickExportRequest.getRecordType()); | ||
} | ||
if (ids.size() > 1) { | ||
log.warn("More than 1 job profile found by the following recordType: {}, only first one will be used: {}", | ||
quickExportRequest.getRecordType(), ids.get(0)); | ||
} | ||
return ids.get(0); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.