Skip to content

Commit

Permalink
Merge pull request #13 from tcezard/EVA3533_processing_status
Browse files Browse the repository at this point in the history
EVA-3533 Endpoints to retrieve and mark submission processing status
  • Loading branch information
tcezard authored Jul 1, 2024
2 parents 2a03076 + 2417a2d commit 8864295
Show file tree
Hide file tree
Showing 10 changed files with 324 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
import uk.ac.ebi.eva.submission.service.LsriTokenService;
import uk.ac.ebi.eva.submission.service.WebinTokenService;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class BaseController {
private final WebinTokenService webinTokenService;
Expand All @@ -35,6 +37,10 @@ public SubmissionAccount getSubmissionAccount(String bearerToken) {
return submissionAccount;
}

public List<Submission> stripUserDetails(List<Submission> submissions){
return submissions.stream().map(this::stripUserDetails).collect(Collectors.toList());
}

public Submission stripUserDetails(Submission submission) {
Submission responseSubmission = new Submission(submission.getSubmissionId());
responseSubmission.setStatus(submission.getStatus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,24 @@
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import uk.ac.ebi.eva.submission.controller.BaseController;
import uk.ac.ebi.eva.submission.entity.Submission;
import uk.ac.ebi.eva.submission.entity.SubmissionProcessing;
import uk.ac.ebi.eva.submission.exception.SubmissionDoesNotExistException;
import uk.ac.ebi.eva.submission.model.SubmissionProcessingStatus;
import uk.ac.ebi.eva.submission.model.SubmissionProcessingStep;
import uk.ac.ebi.eva.submission.model.SubmissionStatus;
import uk.ac.ebi.eva.submission.service.LsriTokenService;
import uk.ac.ebi.eva.submission.service.SubmissionService;
import uk.ac.ebi.eva.submission.service.WebinTokenService;

import java.util.List;

@RestController
@RequestMapping("/v1/admin")
public class AdminController extends BaseController {
Expand All @@ -44,4 +51,50 @@ public ResponseEntity<?> markSubmissionStatus(@PathVariable("submissionId") Stri
Submission submission = this.submissionService.markSubmissionStatus(submissionId, status);
return new ResponseEntity<>(stripUserDetails(submission), HttpStatus.OK);
}

@Operation(summary = "This endpoint retrieves all the submissions of a specific status present in the database")
@Parameters({
@Parameter(name="status", description = "Desired status of the submission ",
required = true, in= ParameterIn.PATH)
})
@GetMapping("submissions/status/{status}")
public ResponseEntity<?> getSubmissionsbyStatus(@PathVariable("status") SubmissionStatus status) {
List<Submission> submissions = submissionService.getSubmissionsByStatus(status);
return new ResponseEntity<>(stripUserDetails(submissions), HttpStatus.OK);
}

@Operation(summary = "Given a submission id, this endpoint updates the processing status of the submission to the one provided",
security = {@SecurityRequirement(name = "basicAuth")
})
@Parameters({
@Parameter(name="submissionId", description = "Id of the submission whose status needs to be updated",
required = true, in= ParameterIn.PATH),
@Parameter(name="step", description = "The processing step of the submission",
required = true, in= ParameterIn.PATH),
@Parameter(name="status", description = "The status of the processing step for this submission",
required = true, in= ParameterIn.PATH)
})
@PutMapping("submission-process/{submissionId}/{step}/{status}")
public ResponseEntity<?> markSubmissionProcessStepAndStatus(@PathVariable("submissionId") String submissionId,
@PathVariable("step") SubmissionProcessingStep step,
@PathVariable("status") SubmissionProcessingStatus status) {
SubmissionProcessing submissionProc = this.submissionService.markSubmissionProcessStepAndStatus(submissionId, step, status);
return new ResponseEntity<>(submissionProc, HttpStatus.OK);
}

@Operation(summary = "This endpoint retrieves all the submissions from the database with given step and status")
@Parameters({
@Parameter(name="step", description = "The processing step of the submission.",
required = true, in= ParameterIn.PATH),
@Parameter(name="status", description = "The status of the submission processing step.",
required = true, in= ParameterIn.PATH)
})
@GetMapping("submission-processes/{step}/{status}")
public ResponseEntity<?> getSubmissionsProcessingByStepAndStatus(
@PathVariable("step") SubmissionProcessingStep step,
@PathVariable("status") SubmissionProcessingStatus status) {
List<SubmissionProcessing> submissions = submissionService.getSubmissionsByProcessingStepAndStatus(step, status);
return new ResponseEntity<>(submissions, HttpStatus.OK);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package uk.ac.ebi.eva.submission.entity;

import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.lang.NonNull;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import java.time.LocalDateTime;
import java.util.Objects;

@Entity
@Table(schema = "eva_submissions", name = "submission_processing_status")
public class SubmissionProcessing {

public SubmissionProcessing() {

}

public SubmissionProcessing(String submissionId) {
this.submissionId = submissionId;
}

@Id
@NonNull
@Column(nullable = false, name = "submission_id")
private String submissionId;

@OneToOne
@JoinColumn(name = "submission_id", referencedColumnName = "submission_id", insertable = false, updatable = false)
private Submission submission;

@NonNull
@Column(nullable = false)
private String step;

@NonNull
@Column(nullable = false)
private String status;

@NonNull
@Column(nullable = false, columnDefinition = "INTEGER DEFAULT 5")
private Integer priority = 5;

@Column(nullable = false)
@UpdateTimestamp
private LocalDateTime lastUpdateTime;

public String getSubmissionId() {
return submissionId;
}

@NonNull
public String getStep() {
return step;
}

public void setStep(@NonNull String step) {
this.step = step;
}

@NonNull
public String getStatus() {
return status;
}

public void setStatus(@NonNull String status) {
this.status = status;
}

@NonNull
public Integer getPriority() {
return priority;
}

public void setPriority(@NonNull Integer priority) {
this.priority = priority;
}

public LocalDateTime getLastUpdateTime() {
return lastUpdateTime;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SubmissionProcessing)) return false;
SubmissionProcessing that = (SubmissionProcessing) o;
return getSubmissionId().equals(that.getSubmissionId());
}

@Override
public int hashCode() {
return Objects.hash(getSubmissionId());
}

@Override
public String toString() {
return "Submission{" +
"submissionId='" + submissionId + '\'' +
", step=" + step +
", status=" + status +
", priority=" + priority +
", lastUpdateTime=" + lastUpdateTime +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package uk.ac.ebi.eva.submission.model;

public enum SubmissionProcessingStatus {
READY_FOR_PROCESSING, FAILURE, SUCCESS, RUNNING, ON_HOLD
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package uk.ac.ebi.eva.submission.model;

public enum SubmissionProcessingStep {
INGESTION, VALIDATION, BROKERING,
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package uk.ac.ebi.eva.submission.model;

public enum SubmissionStatus {
OPEN, UPLOADED, COMPLETED, TIMEOUT, FAILED, CANCELLED
OPEN, UPLOADED, COMPLETED, TIMEOUT, FAILED, CANCELLED, PROCESSING

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package uk.ac.ebi.eva.submission.repository;

import org.springframework.data.repository.CrudRepository;
import uk.ac.ebi.eva.submission.entity.SubmissionProcessing;

import java.util.List;

public interface SubmissionProcessingRepository extends CrudRepository<SubmissionProcessing, String> {

SubmissionProcessing findBySubmissionId(String submissionId);

List<SubmissionProcessing> findByStepAndStatus(String step, String status);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import org.springframework.data.repository.CrudRepository;
import uk.ac.ebi.eva.submission.entity.Submission;

import java.util.List;

public interface SubmissionRepository extends CrudRepository<Submission, String> {
Submission findBySubmissionId(String submissionId);

List<Submission> findByStatus(String status);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@
import uk.ac.ebi.eva.submission.entity.Submission;
import uk.ac.ebi.eva.submission.entity.SubmissionAccount;
import uk.ac.ebi.eva.submission.entity.SubmissionDetails;
import uk.ac.ebi.eva.submission.entity.SubmissionProcessing;
import uk.ac.ebi.eva.submission.exception.RequiredFieldsMissingException;
import uk.ac.ebi.eva.submission.exception.SubmissionDoesNotExistException;
import uk.ac.ebi.eva.submission.model.SubmissionProcessingStatus;
import uk.ac.ebi.eva.submission.model.SubmissionProcessingStep;
import uk.ac.ebi.eva.submission.model.SubmissionStatus;
import uk.ac.ebi.eva.submission.repository.SubmissionAccountRepository;
import uk.ac.ebi.eva.submission.repository.SubmissionDetailsRepository;
import uk.ac.ebi.eva.submission.repository.SubmissionProcessingRepository;
import uk.ac.ebi.eva.submission.repository.SubmissionRepository;
import uk.ac.ebi.eva.submission.util.EmailNotificationHelper;
import uk.ac.ebi.eva.submission.util.MailSender;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

Expand All @@ -31,6 +36,8 @@ public class SubmissionService {

private final SubmissionDetailsRepository submissionDetailsRepository;

private final SubmissionProcessingRepository submissionProcessingRepository;

private final GlobusDirectoryProvisioner globusDirectoryProvisioner;

private final MailSender mailSender;
Expand All @@ -43,11 +50,13 @@ public class SubmissionService {
public SubmissionService(SubmissionRepository submissionRepository,
SubmissionAccountRepository submissionAccountRepository,
SubmissionDetailsRepository submissionDetailsRepository,
SubmissionProcessingRepository submissionProcessingRepository,
GlobusDirectoryProvisioner globusDirectoryProvisioner,
MailSender mailSender, EmailNotificationHelper emailHelper) {
this.submissionRepository = submissionRepository;
this.submissionAccountRepository = submissionAccountRepository;
this.submissionDetailsRepository = submissionDetailsRepository;
this.submissionProcessingRepository = submissionProcessingRepository;
this.globusDirectoryProvisioner = globusDirectoryProvisioner;
this.mailSender = mailSender;
this.emailHelper = emailHelper;
Expand Down Expand Up @@ -133,4 +142,25 @@ public void sendMailNotificationForStatusUpdate(SubmissionAccount submissionAcco
String body = emailHelper.getTextForSubmissionStatusUpdate(submissionAccount, submissionId, submissionStatus, success);
mailSender.sendEmail(sendTo, subject, body);
}

public List<Submission> getSubmissionsByStatus(SubmissionStatus status) {
return submissionRepository.findByStatus(status.toString());
}

public List<SubmissionProcessing> getSubmissionsByProcessingStepAndStatus(SubmissionProcessingStep step,
SubmissionProcessingStatus status) {
return submissionProcessingRepository.findByStepAndStatus(step.toString(), status.toString());

}

public SubmissionProcessing markSubmissionProcessStepAndStatus(String submissionId,
SubmissionProcessingStep step,
SubmissionProcessingStatus status) {
SubmissionProcessing submissionProc = submissionProcessingRepository.findBySubmissionId(submissionId);
submissionProc.setStep(step.toString());
submissionProc.setStatus(status.toString());
return submissionProcessingRepository.save(submissionProc);
}


}
Loading

0 comments on commit 8864295

Please sign in to comment.