Skip to content

Commit

Permalink
feat($Quartz): api for updating Quartz job
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Oct 1, 2021
1 parent 0f4f5aa commit 19b94ec
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,21 @@ public PageResponseBodyBean<GetQuartzJobConfigurationPageListItem> getPageList(

@PostMapping("/quartz-job-configurations")
@ApiOperation(value = "Create Quartz job configuration", notes = "Create Quartz job configuration")
public ResponseBodyBean<CreateQuartzJobConfigurationResponse> create(
@Valid @RequestBody CreateQuartzJobConfigurationPayload payload
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> create(
@Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
) {
return ResponseBodyBean.ofSuccess(this.service.create(payload));
}

@PutMapping("/quartz-job-configurations/{id}")
@ApiOperation(value = "Modify Quartz job configuration", notes = "Modify Quartz job configuration")
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> modify(
@PathVariable Long id,
@Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
) {
return ResponseBodyBean.ofSuccess(this.service.modify(id, payload));
}

@Override
protected void onExceptionOccurred() {
log.error("Exception occurred when uploading excel. Excel class: {}", QuartzJobConfigurationExcel.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
import javax.validation.constraints.NotNull;

/**
* <h1>CreateQuartzJobConfigurationPayload</h1>
* <h1>CreateOrModifyQuartzJobConfigurationPayload</h1>
* <p>
* Change description here.
*
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 11:43 PM
**/
@Data
public class CreateQuartzJobConfigurationPayload {
public class CreateOrModifyQuartzJobConfigurationPayload {
@NotBlank
@Length(max = 50)
private String name;
Expand All @@ -40,15 +40,15 @@ public class CreateQuartzJobConfigurationPayload {
private Byte status;

public QuartzJobConfiguration asQuartzJobConfiguration() {
val quartzJobConfiguration = new QuartzJobConfiguration();
quartzJobConfiguration.setName(this.name);
quartzJobConfiguration.setGroup(this.group);
quartzJobConfiguration.setInvokeTarget(this.invokeTarget);
quartzJobConfiguration.setCronExpression(this.cronExpression);
quartzJobConfiguration.setMisfirePolicy(this.misfirePolicy);
quartzJobConfiguration.setConcurrent(this.concurrent);
quartzJobConfiguration.setDescription(this.description);
quartzJobConfiguration.setStatus(this.status);
return quartzJobConfiguration;
val result = new QuartzJobConfiguration();
result.setName(this.name);
result.setGroup(this.group);
result.setInvokeTarget(this.invokeTarget);
result.setCronExpression(this.cronExpression);
result.setMisfirePolicy(this.misfirePolicy);
result.setConcurrent(this.concurrent);
result.setDescription(this.description);
result.setStatus(this.status);
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
import lombok.Data;

/**
* <h1>CreateQuartzJobConfigurationResponse</h1>
* <h1>CreateOrModifyQuartzJobConfigurationResponse</h1>
* <p>
* Change description here.
*
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 11:43 PM
**/
@Data
@AllArgsConstructor
public class CreateQuartzJobConfigurationResponse {
public class CreateOrModifyQuartzJobConfigurationResponse {
private Long id;
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* Description: QuartzJobConfigurationService
*
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/23/2021 8:23 AM
*/
**/
@Validated
public interface QuartzJobConfigurationService extends IService<QuartzJobConfiguration> {
String TEMPLATE_EXCEL = "quartz-job-configuration-stat.xlsx";
Expand Down Expand Up @@ -60,5 +60,15 @@ void validateBeforeAddToBeanList(List<QuartzJobConfigurationExcel> beanList, Qua
* @param payload the payload
* @return the create quartz job configuration response
*/
CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload);
CreateOrModifyQuartzJobConfigurationResponse create(@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);

/**
* Modify modify quartz job configuration response.
*
* @param id the id
* @param payload the payload
* @return the modify quartz job configuration response
*/
CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,16 +112,35 @@ public List<QuartzJobConfigurationExcel> getListForExporting() {

@Override
@SneakyThrows
public CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload) {
public CreateOrModifyQuartzJobConfigurationResponse create(
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload
) {
this.validateCronExpression(payload.getCronExpression());
val quartzJobConfiguration = payload.asQuartzJobConfiguration();
val cronExpression = quartzJobConfiguration.getCronExpression();
quartzJobConfiguration.setServiceName(this.mafProjectProperty.getProjectArtifactId());
requireTrue(this.save(quartzJobConfiguration), saved -> log.info("Quartz job configuration saved: {}", saved))
.orElseThrow(() -> new IllegalStateException("Failed to save quartz job configuration"));
return new CreateOrModifyQuartzJobConfigurationResponse(quartzJobConfiguration.getId());
}

private void validateCronExpression(String cronExpression) throws Throwable {
requireTrue(
CronUtil.isValid(cronExpression),
valid -> log.warn("Cron validation: {}, expression: {}", valid, cronExpression)
).orElseThrow(() -> new IllegalArgumentException(format("Cron({}) invalid", cronExpression)));
quartzJobConfiguration.setServiceName(this.mafProjectProperty.getProjectArtifactId());
requireTrue(this.save(quartzJobConfiguration), saved -> log.info("Quartz job configuration saved: {}", saved))
.orElseThrow(() -> new IllegalStateException("Failed to save quartz job configuration"));
return new CreateQuartzJobConfigurationResponse(quartzJobConfiguration.getId());
}

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload) {
this.validateCronExpression(payload.getCronExpression());
val quartzJobConfiguration = payload.asQuartzJobConfiguration();
quartzJobConfiguration.setId(id);
requireTrue(
this.updateById(quartzJobConfiguration),
updated -> log.warn("Quartz job configuration updated: {}", updated)
).orElseThrow(() -> new IllegalStateException("Failed to update quartz job configuration"));
return new CreateOrModifyQuartzJobConfigurationResponse(id);
}
}

0 comments on commit 19b94ec

Please sign in to comment.