create Task via Template in service

This commit is contained in:
HWienhold 2023-08-14 12:36:42 +02:00
parent c77912e4b0
commit 26b505c021
9 changed files with 131 additions and 13 deletions

View File

@ -22,7 +22,7 @@ public class ApplianceService {
private final ApplianceRepository repository;
private final WebClient.Builder webClientBuilder;
public ApplianceResponse createApplianceAndRegister(ApplianceRequest request, String site_id) {
public ApplianceResponse createApplianceAndRegister(ApplianceRequest request, String siteId) {
Appliance app = Appliance.builder()
.qrCode(request.getQrCode())
.applianceClass(request.getApplianceClass())
@ -34,7 +34,7 @@ public class ApplianceService {
repository.save(app);
log.info("Added {} to db", app.getId());
registerAppliance(app, site_id);
registerAppliance(app, siteId);
return mapApplianceToResponse(app);
}
@ -43,14 +43,14 @@ public class ApplianceService {
return mapApplianceToResponse(app);
}
private void registerAppliance(Appliance app, String site_id) {
private void registerAppliance(Appliance app, String siteId) {
webClientBuilder.build().patch()
.uri("http://localhost:8080/api/sites/" + site_id + "/register",
.uri("http://localhost:8080/api/sites/" + siteId + "/register",
uri-> uri.queryParam("id", app.getId()).build()
).retrieve()
.bodyToMono(SiteResponse.class)
.doOnNext(res->log.info("Registered successfully app " + app.getId() + " to site " + site_id + " " + res))
.doOnError(res->log.error("Registration of app " + app.getId() + " to site " + site_id + " failed " + res))
.doOnNext(res->log.info("Registered successfully app " + app.getId() + " to site " + siteId + " " + res))
.doOnError(res->log.error("Registration of app " + app.getId() + " to site " + siteId + " failed " + res))
.subscribe();
}

View File

@ -42,6 +42,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>

View File

@ -6,6 +6,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@ -59,4 +60,14 @@ public class TaskController {
public TaskResponse createTaskFromTemplate(@RequestBody TaskTemplateDto template) {
return null;
}
@PostMapping(path="/byTemplate")
public TaskResponse createTaskFromTemplateId(@RequestAttribute(value="id") String templateId) {
return service.createByTemplateId(templateId);
}
@PostMapping(path="/byTemplate")
public TaskResponse createTaskFromTemplateName(@RequestAttribute(value="group_id") String templateName) {
return service.createByTemplateName(templateName);
}
}

View File

@ -1,10 +1,12 @@
package com.indu.taskservice.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {

View File

@ -0,0 +1,46 @@
package com.indu.taskservice.repository;
import org.springframework.stereotype.Repository;
import org.springframework.web.reactive.function.client.WebClient;
import com.indu.taskservice.dto.TaskTemplateDto;
import com.indu.taskservice.model.TaskTemplate;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Repository
@RequiredArgsConstructor
@Slf4j
public class TaskTemplateRepository {
private final WebClient.Builder webClientBuilder;
public TaskTemplate fetchById(String id) {
TaskTemplateDto taskTemplateResponse = webClientBuilder.build().get()
.uri("http://localhost:8080/api/template/tasks/" + id).retrieve()
.bodyToMono(TaskTemplateDto.class)
.block();
return createFromDto(taskTemplateResponse);
}
public TaskTemplate fetchByName(String groupId) {
TaskTemplateDto taskTemplateResponse = webClientBuilder.build().get()
.uri("http://localhost:8080/api/template/tasks",
uri->uri.queryParam("group_id", groupId).build()
).retrieve()
.bodyToMono(TaskTemplateDto.class)
.block();
return createFromDto(taskTemplateResponse);
}
public TaskTemplate createFromDto(TaskTemplateDto taskTemplateDto) {
return TaskTemplate.builder()
.id(taskTemplateDto.getId())
.name(taskTemplateDto.getName())
.abortAction(taskTemplateDto.getAbortAction())
.initialState(taskTemplateDto.getInitialState())
.requiredFieldOnFinish(taskTemplateDto.getRequiredFieldOnFinish())
.build();
}
}

View File

@ -15,7 +15,10 @@ import com.indu.taskservice.exception.TaskChangedException;
import com.indu.taskservice.model.AbortAction;
import com.indu.taskservice.model.Task;
import com.indu.taskservice.model.TaskState;
import com.indu.taskservice.model.TaskTemplate;
import com.indu.taskservice.model.User;
import com.indu.taskservice.repository.TaskRepository;
import com.indu.taskservice.repository.TaskTemplateRepository;
import jakarta.validation.Valid;
import jakarta.ws.rs.NotFoundException;
@ -26,6 +29,7 @@ import lombok.RequiredArgsConstructor;
public class TaskService {
private final TaskRepository repository;
private final TaskTemplateRepository taskTemplateRepo;
public List<TaskResponse> getAllTasks() {
return repository.findAll().stream().map(task -> TaskMapper.instance.taskToResponse(task)).toList();
@ -66,7 +70,10 @@ public class TaskService {
public TaskResponse activateTask(String id, @Valid EditorData editor) {
Task task = getTaskById(id);
TaskState state = task.getTemplate().getActivationState();
return null;
// TODO: validate is WAITING (?)
task.setState(state);
repository.save(task);
return TaskMapper.instance.taskToResponse(task);
}
public void activateTask(Task task) {
@ -155,4 +162,37 @@ public class TaskService {
}
}
public TaskResponse createByTemplateId(String templateId) {
TaskTemplate template = taskTemplateRepo.fetchById(templateId);
Task newTask = createAndSave(template);
return TaskMapper.instance.taskToResponse(newTask);
}
public TaskResponse createByTemplateName(String templateName) {
TaskTemplate template = taskTemplateRepo.fetchByName(templateName);
Task newTask = createAndSave(template);
return TaskMapper.instance.taskToResponse(newTask);
}
public Task createFromTemplate(TaskTemplate template) {
EditorData editor = EditorData.builder()
.lastEdited(new Date())
.editor(User.builder()
.lastName("SYSTEM")
.build())
.build();
return Task.builder()
.editor (editor)
.state(template.getInitialState())
.template(template)
.build();
}
public Task createAndSave(TaskTemplate template) {
Task task = createFromTemplate(template);
repository.save(task);
return task;
}
}

View File

@ -1,6 +1,9 @@
package com.indu.workflowtemplateservice.dto;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
@ -11,6 +14,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@Builder
public class WorkflowTemplateRequest {
private String id;
@ -18,5 +22,10 @@ public class WorkflowTemplateRequest {
@NotNull
private String name; // unique identifier for sequence
private List<String> tasks;
// TODO: allow to be added direclty, for now tasks must be added bf and added here via id
private List<String> tasks_ids;
// private List<String> workflow_ids;
private Map<String, String> requiredFieldOnFinish; // for now just requiredFields => pattern
}

View File

@ -26,10 +26,12 @@ public class WorkflowTemplate {
private char identiferPrefix;
@Indexed(unique = true)
private String name; // unique identifier for sequence
private List<TaskTemplateData> tasks;
private List<String> tasks; //ids
private int subflowStart;
// private int subflowStart; // activate sub flows when workflow gets activated
@DBRef
@DBRef(lazy=true)
private List<WorkflowTemplate> subWorkflow;
private String parent_id;
}

View File

@ -31,8 +31,12 @@ public class WorkflowTemplateService {
throw new NameAlreadyTakenException(request.getName());
}
WorkflowTemplate template = WorkflowTemplate.builder().identiferPrefix(request.getIdentiferPrefix())
.name(request.getName()).build();
WorkflowTemplate template = WorkflowTemplate.builder()
.identiferPrefix(request.getIdentiferPrefix())
.name(request.getName())
.tasks(request.getTasks_ids())
.build();
repository.save(template);
return template;