Skip to content

Commit

Permalink
feat($Quartz): api for creating Quartz configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Oct 1, 2021
1 parent ffef868 commit 0f4f5aa
Show file tree
Hide file tree
Showing 11 changed files with 123 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ public class PermissionRemoteApiController {
@GetMapping("/permissions")
@ApiOperation(value = "Get permission list by role id list", notes = "Get permission list by role id list (remote)")
public ResponseBodyBean<GetPermissionListByRoleIdListResponse> getPermissionListByRoleIdList(@Valid GetPermissionListByRoleIdListPayload payload) {
return ResponseBodyBean.ofSuccess(permissionService.getPermissionListByRoleIdList(payload));
return ResponseBodyBean.ofSuccess(this.permissionService.getPermissionListByRoleIdList(payload));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ public class RoleRemoteApiController {
@GetMapping("/roles/{userId}")
@ApiOperation(value = "Get role list", notes = "Get role list (Remote API)")
public ResponseBodyBean<GetRoleListByUserIdResponse> getRoleList(@PathVariable Long userId) {
return ResponseBodyBean.ofSuccess(roleService.getRoleList(userId));
return ResponseBodyBean.ofSuccess(this.roleService.getRoleList(userId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public static <T> ResponseBodyBean<T> ofSuccess(@Nullable final T data) {
* @param message message to be responded
* @return response body
*/
public static <T> ResponseBodyBean<T> ofSuccess(@NonNull final String message) {
public static <T> ResponseBodyBean<T> ofSuccessMessage(@NonNull final String message) {
ResponseBodyBean<T> responseBodyBean = new ResponseBodyBean<>();
responseBodyBean.setMessage(message);
return responseBodyBean;
Expand Down Expand Up @@ -209,7 +209,7 @@ public static <T> ResponseBodyBean<T> ofSuccess(@Nullable final T data,
* @param message message to be responded.
* @return response body
*/
public static <T> ResponseBodyBean<T> ofFailure(@NonNull final String message) throws BizException {
public static <T> ResponseBodyBean<T> ofFailureMessage(@NonNull final String message) throws BizException {
throw new BizException(message);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -33,14 +34,14 @@ public class ExerciseController {
@GetMapping("/get-by-id")
@ApiOperation(value = "/get-by-id", notes = "Retrieve exercise by id")
public ResponseBodyBean<ExercisePo> selectOne(Long id) {
return ResponseBodyBean.ofSuccess(exerciseService.queryById(id));
return ResponseBodyBean.ofSuccess(this.exerciseService.queryById(id));
}

@GetMapping("/get-page-list")
@ApiOperation(value = "/get-page-list", notes = "Retrieve page list")
public ResponseBodyBean<List<ExercisePo>> getPageList(@Valid GetPageListPayload payload) {
var exercisePo = new ExercisePo();
val exercisePo = new ExercisePo();
BeanUtil.copyProperties(payload, exercisePo);
return ResponseBodyBean.ofSuccess(exerciseService.getPageList(exercisePo));
return ResponseBodyBean.ofSuccess(this.exerciseService.getPageList(exercisePo));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ public class CommonController {
@GetMapping("/app-info")
@ApiOperation(value = "/app-info", notes = "Retrieve application information")
public ResponseBodyBean<JSON> applicationInformation() {
return ResponseBodyBean.ofSuccess(commonService.getApplicationInfo(), "Succeed to retrieve app info.");
return ResponseBodyBean.ofSuccess(this.commonService.getApplicationInfo(), "Succeed to retrieve app info.");
}

@PostMapping("/validation-test")
@ApiOperation(value = "/validation-test", notes = "Validation of request payload test")
public ResponseBodyBean<String> validationTest(@RequestBody ValidationTestPayload payload) {
commonService.validateObject(payload);
this.commonService.validateObject(payload);
return ResponseBodyBean.ofSuccess(payload.getName(), "validationTest()");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ public class CommonController {
@GetMapping("/app-info")
@ApiOperation(value = "/app-info", notes = "Retrieve application information")
public ResponseBodyBean<JSON> applicationInformation() {
return ResponseBodyBean.ofSuccess(commonService.getApplicationInfo(), "Succeed to retrieve app info.");
return ResponseBodyBean.ofSuccess(this.commonService.getApplicationInfo(), "Succeed to retrieve app info.");
}

@PostMapping("/validation-test")
@ApiOperation(value = "/validation-test", notes = "Validation of request payload test")
public ResponseBodyBean<String> validationTest(@RequestBody ValidationTestPayload payload) {
commonService.validateObject(payload);
this.commonService.validateObject(payload);
return ResponseBodyBean.ofSuccess(payload.getName(), "validationTest()");
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package com.jmsoftware.maf.springcloudstarter.quartz.controller;

import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.common.bean.ResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.poi.AbstractExcelDataController;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.service.QuartzJobConfigurationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.time.Instant;
Expand Down Expand Up @@ -43,6 +40,14 @@ public PageResponseBodyBean<GetQuartzJobConfigurationPageListItem> getPageList(
return this.service.getPageList(payload);
}

@PostMapping("/quartz-job-configurations")
@ApiOperation(value = "Create Quartz job configuration", notes = "Create Quartz job configuration")
public ResponseBodyBean<CreateQuartzJobConfigurationResponse> create(
@Valid @RequestBody CreateQuartzJobConfigurationPayload payload
) {
return ResponseBodyBean.ofSuccess(this.service.create(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
@@ -0,0 +1,54 @@
package com.jmsoftware.maf.springcloudstarter.quartz.entity;

import com.jmsoftware.maf.springcloudstarter.quartz.entity.persistence.QuartzJobConfiguration;
import lombok.Data;
import lombok.val;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
* <h1>CreateQuartzJobConfigurationPayload</h1>
* <p>
* Change description here.
*
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM
**/
@Data
public class CreateQuartzJobConfigurationPayload {
@NotBlank
@Length(max = 50)
private String name;
@NotBlank
@Length(max = 200)
private String group;
@NotBlank
@Length(max = 500)
private String invokeTarget;
@NotBlank
@Length(max = 50)
private String cronExpression;
@NotNull
private Byte misfirePolicy;
@NotNull
private Byte concurrent;
@NotBlank
@Length(max = 1000)
private String description;
@NotNull
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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.jmsoftware.maf.springcloudstarter.quartz.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
* <h1>CreateQuartzJobConfigurationResponse</h1>
* <p>
* Change description here.
*
* @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM
**/
@Data
@AllArgsConstructor
public class CreateQuartzJobConfigurationResponse {
private Long id;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@

import com.baomidou.mybatisplus.extension.service.IService;
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.persistence.QuartzJobConfiguration;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
Expand Down Expand Up @@ -54,4 +53,12 @@ void validateBeforeAddToBeanList(List<QuartzJobConfigurationExcel> beanList, Qua
* @return the list for exporting
*/
List<QuartzJobConfigurationExcel> getListForExporting();

/**
* Create create quartz job configuration response.
*
* @param payload the payload
* @return the create quartz job configuration response
*/
CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.configuration.MafProjectProperty;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.persistence.QuartzJobConfiguration;
import com.jmsoftware.maf.springcloudstarter.quartz.mapper.QuartzJobConfigurationMapper;
import com.jmsoftware.maf.springcloudstarter.quartz.service.QuartzJobConfigurationService;
import com.jmsoftware.maf.springcloudstarter.quartz.util.CronUtil;
import com.jmsoftware.maf.springcloudstarter.quartz.util.ScheduleUtil;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
Expand All @@ -26,10 +25,12 @@
import javax.annotation.PostConstruct;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import static cn.hutool.core.text.CharSequenceUtil.format;
import static com.jmsoftware.maf.springcloudstarter.function.BooleanCheck.requireTrue;

/**
Expand Down Expand Up @@ -108,4 +109,19 @@ public void save(@NotEmpty List<@Valid QuartzJobConfigurationExcel> beanList) {
public List<QuartzJobConfigurationExcel> getListForExporting() {
return this.getBaseMapper().selectListForExporting(this.mafProjectProperty.getProjectArtifactId());
}

@Override
@SneakyThrows
public CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload) {
val quartzJobConfiguration = payload.asQuartzJobConfiguration();
val cronExpression = quartzJobConfiguration.getCronExpression();
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());
}
}

0 comments on commit 0f4f5aa

Please sign in to comment.