mirror of
https://github.com/vran-dev/databasir.git
synced 2025-08-08 17:32:14 +08:00
feat: add cron validation
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.databasir.api;
|
||||
|
||||
import com.databasir.api.validator.CronExpressionValidator;
|
||||
import com.databasir.common.JsonData;
|
||||
import com.databasir.core.domain.project.data.*;
|
||||
import com.databasir.core.domain.project.service.ProjectService;
|
||||
@@ -21,9 +22,12 @@ public class ProjectController {
|
||||
|
||||
private final ProjectService projectService;
|
||||
|
||||
private final CronExpressionValidator cronExpressionValidator;
|
||||
|
||||
@PostMapping(Routes.GroupProject.CREATE)
|
||||
@PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#request.groupId, 'GROUP_MEMBER?groupId='+#request.groupId)")
|
||||
public JsonData<Void> create(@RequestBody @Valid ProjectCreateRequest request) {
|
||||
cronExpressionValidator.isValidCron(request);
|
||||
projectService.create(request);
|
||||
return JsonData.ok();
|
||||
}
|
||||
@@ -32,6 +36,7 @@ public class ProjectController {
|
||||
@PreAuthorize("hasAnyAuthority('SYS_OWNER', 'GROUP_OWNER?groupId='+#groupId, 'GROUP_MEMBER?groupId='+#groupId)")
|
||||
public JsonData<Void> update(@RequestBody @Valid ProjectUpdateRequest request,
|
||||
@PathVariable Integer groupId) {
|
||||
cronExpressionValidator.isValidCron(request);
|
||||
projectService.update(groupId, request);
|
||||
return JsonData.ok();
|
||||
}
|
||||
|
@@ -0,0 +1,33 @@
|
||||
package com.databasir.api.validator;
|
||||
|
||||
import com.databasir.core.domain.DomainErrors;
|
||||
import com.databasir.core.domain.project.data.ProjectCreateRequest;
|
||||
import com.databasir.core.domain.project.data.ProjectUpdateRequest;
|
||||
import org.quartz.CronExpression;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
@Component
|
||||
public class CronExpressionValidator {
|
||||
|
||||
public void isValidCron(ProjectUpdateRequest request) {
|
||||
if (request.getProjectSyncRule().getIsAutoSync()) {
|
||||
isValidCron(request.getProjectSyncRule().getAutoSyncCron());
|
||||
}
|
||||
}
|
||||
|
||||
public void isValidCron(ProjectCreateRequest request) {
|
||||
if (request.getProjectSyncRule().getIsAutoSync()) {
|
||||
isValidCron(request.getProjectSyncRule().getAutoSyncCron());
|
||||
}
|
||||
}
|
||||
|
||||
public void isValidCron(String cron) {
|
||||
try {
|
||||
new CronExpression(cron);
|
||||
} catch (ParseException pe) {
|
||||
throw DomainErrors.INVALID_CRON_EXPRESSION.exception("错误的 CRON 表达式:" + pe.getMessage(), pe);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user