Skip to content
Snippets Groups Projects
Commit 50ee66ca authored by Jan Tymel's avatar Jan Tymel
Browse files

Change REST API creating a new task according to the new design, add task clone API

Related to #10
parent 320c3a7f
No related branches found
No related tags found
No related merge requests found
...@@ -164,22 +164,22 @@ public class AdaptiveTrainingDefinitionsRestController { ...@@ -164,22 +164,22 @@ public class AdaptiveTrainingDefinitionsRestController {
levelOperationsService.updateTask(taskUpdateDto); levelOperationsService.updateTask(taskUpdateDto);
} }
@ApiOperation(httpMethod = "POST", // @ApiOperation(httpMethod = "POST",
value = "Create a new task", // value = "Create a new task",
response = BaseLevelDto.class, // response = BaseLevelDto.class,
nickname = "createTask", // nickname = "createTask",
produces = MediaType.APPLICATION_JSON_VALUE // produces = MediaType.APPLICATION_JSON_VALUE
) // )
@ApiResponses(value = { // @ApiResponses(value = {
@ApiResponse(code = 200, message = "Task created"), // @ApiResponse(code = 200, message = "Task created"),
@ApiResponse(code = 500, message = "Unexpected application error") // @ApiResponse(code = 500, message = "Unexpected application error")
}) // })
@PostMapping(path = "/phases/{phaseId}") // @PostMapping(path = "/phases/{phaseId}")
public BaseLevelDto createTask( // public BaseLevelDto createTask(
@ApiParam(value = "Phase ID", required = true) @PathVariable(name = "phaseId") Long phaseId) { // @ApiParam(value = "Phase ID", required = true) @PathVariable(name = "phaseId") Long phaseId) {
//
return levelOperationsService.createTask(phaseId); // return levelOperationsService.createTask(phaseId);
} // }
@ApiOperation(httpMethod = "POST", @ApiOperation(httpMethod = "POST",
value = "Create a new question in questionnaire", value = "Create a new question in questionnaire",
......
...@@ -13,12 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -13,12 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid; import javax.validation.Valid;
...@@ -38,7 +36,7 @@ public class PhasesController { ...@@ -38,7 +36,7 @@ public class PhasesController {
value = "Create a new phase", value = "Create a new phase",
notes = "Creates a new default phase with a specified type", notes = "Creates a new default phase with a specified type",
response = BaseLevelDto.class, response = BaseLevelDto.class,
nickname = "createLevel", nickname = "createPhase",
produces = MediaType.APPLICATION_JSON_VALUE produces = MediaType.APPLICATION_JSON_VALUE
) )
@ApiResponses(value = { @ApiResponses(value = {
......
package com.example.demo.controller;
import com.example.demo.dto.TaskDto;
import com.example.demo.service.TaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.Authorization;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/training-definitions/{definitionId}/phases/{phaseId}/tasks", produces = MediaType.APPLICATION_JSON_VALUE)
@Api(value = "/training-definitions/{definitionId}/phases",
tags = "Tasks",
consumes = MediaType.APPLICATION_JSON_VALUE,
authorizations = @Authorization(value = "bearerAuth"))
public class TasksController {
@Autowired
private TaskService taskService;
@ApiOperation(httpMethod = "POST",
value = "Create a new task in a phase",
notes = "Creates a new default task in a specified game phase",
response = TaskDto.class,
nickname = "createTask",
produces = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Task created"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PostMapping
public ResponseEntity<TaskDto> createTask(
@ApiParam(value = "Training definition ID", required = true)
@PathVariable(name = "definitionId") Long definitionId,
@ApiParam(value = "Game phase ID", required = true)
@PathVariable(name = "phaseId") Long phaseId) {
TaskDto createdTask = taskService.createDefaultTask(definitionId, phaseId);
return new ResponseEntity<>(createdTask, HttpStatus.CREATED);
}
@ApiOperation(httpMethod = "POST",
value = "Clone task inside of the game phase",
notes = "Creates a new task with the same properties as the specified task (pattern)",
response = TaskDto.class,
nickname = "cloneTask",
produces = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Task cloned"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PostMapping(path = "/{taskId}")
public ResponseEntity<TaskDto> cloneTask(
@ApiParam(value = "Training definition ID", required = true)
@PathVariable(name = "definitionId") Long definitionId,
@ApiParam(value = "Game phase ID", required = true)
@PathVariable(name = "phaseId") Long phaseId,
@ApiParam(value = "Task ID", required = true)
@PathVariable(name = "taskId") Long taskId) {
TaskDto createdTask = taskService.cloneTask(definitionId, phaseId, taskId);
return new ResponseEntity<>(createdTask, HttpStatus.CREATED);
}
}
package com.example.demo.service; package com.example.demo.service;
import com.example.demo.domain.BaseLevel; import com.example.demo.domain.BaseLevel;
import com.example.demo.domain.InfoLevel;
import com.example.demo.domain.PhaseLevel; import com.example.demo.domain.PhaseLevel;
import com.example.demo.domain.Question; import com.example.demo.domain.Question;
import com.example.demo.domain.QuestionChoice; import com.example.demo.domain.QuestionChoice;
import com.example.demo.domain.QuestionnaireLevel; import com.example.demo.domain.QuestionnaireLevel;
import com.example.demo.domain.Task; import com.example.demo.domain.Task;
import com.example.demo.domain.InfoLevel;
import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.BaseLevelDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.dto.PhaseCreateDTO; import com.example.demo.dto.PhaseCreateDTO;
import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.PhaseLevelUpdateDto;
import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionChoiceDto;
...@@ -15,9 +16,7 @@ import com.example.demo.dto.QuestionChoiceUpdateDto; ...@@ -15,9 +16,7 @@ import com.example.demo.dto.QuestionChoiceUpdateDto;
import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionDto;
import com.example.demo.dto.QuestionUpdateDto; import com.example.demo.dto.QuestionUpdateDto;
import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.dto.QuestionnaireUpdateDto;
import com.example.demo.dto.TaskDto;
import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.TaskUpdateDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.enums.PhaseType; import com.example.demo.enums.PhaseType;
import com.example.demo.enums.QuestionType; import com.example.demo.enums.QuestionType;
import com.example.demo.mapper.BeanMapper; import com.example.demo.mapper.BeanMapper;
...@@ -122,12 +121,12 @@ public class LevelOperationsService { ...@@ -122,12 +121,12 @@ public class LevelOperationsService {
return baseLevelDto; return baseLevelDto;
} }
public BaseLevelDto createTask(Long phaseId) { // public BaseLevelDto createTask(Long phaseId) {
TaskDto createdTask = taskService.createDefaultTask(phaseId); // TaskDto createdTask = taskService.createDefaultTask(phaseId);
createdTask.setPhaseType(PhaseType.task); // createdTask.setPhaseType(PhaseType.task);
//
return createdTask; // return createdTask;
} // }
public BaseLevelDto getLevel(Long levelId) { public BaseLevelDto getLevel(Long levelId) {
Optional<BaseLevel> level = baseLevelRepository.findById(levelId); Optional<BaseLevel> level = baseLevelRepository.findById(levelId);
......
package com.example.demo.service; package com.example.demo.service;
import com.example.demo.domain.Task;
import com.example.demo.domain.PhaseLevel; import com.example.demo.domain.PhaseLevel;
import com.example.demo.domain.Task;
import com.example.demo.dto.TaskCreateDto; import com.example.demo.dto.TaskCreateDto;
import com.example.demo.dto.TaskDto; import com.example.demo.dto.TaskDto;
import com.example.demo.mapper.BeanMapper; import com.example.demo.mapper.BeanMapper;
import com.example.demo.repository.TaskRepository;
import com.example.demo.repository.PhaseLevelRepository; import com.example.demo.repository.PhaseLevelRepository;
import com.example.demo.repository.TaskRepository;
import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.IterableUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,16 +32,38 @@ public class TaskService { ...@@ -31,16 +32,38 @@ public class TaskService {
this.phaseLevelRepository = phaseLevelRepository; this.phaseLevelRepository = phaseLevelRepository;
} }
public TaskDto createDefaultTask(Long phaseId) { public TaskDto createDefaultTask(Long trainingDefinitionId, Long phaseId) {
Optional<PhaseLevel> phaseLevel = phaseLevelRepository.findById(phaseId); PhaseLevel gamePhase = phaseLevelRepository.findById(phaseId)
if (phaseLevel.isEmpty()) { .orElseThrow(() -> new RuntimeException("Game phase was not found"));
// TODO return 404 // TODO throw proper exception once kypo2-training is migrated
return null;
} // TODO add check to trainingDefinitionId (field structure will be probably changed)
Task task = new Task(); Task task = new Task();
task.setTitle("Title of task"); task.setTitle("Title of task");
task.setPhaseLevel(phaseLevel.get()); task.setPhaseLevel(gamePhase);
task.setOrder(taskRepository.getCurrentMaxOrder(phaseId) + 1);
Task persistedEntity = taskRepository.save(task);
return BeanMapper.INSTANCE.toDto(persistedEntity);
}
public TaskDto cloneTask(Long trainingDefinitionId, Long phaseId, Long taskId) {
Task taskToBeCloned = taskRepository.findById(taskId)
.orElseThrow(() -> new RuntimeException("Task was not found"));
// TODO throw proper exception once kypo2-training is migrated
PhaseLevel gamePhase = phaseLevelRepository.findById(phaseId)
.orElseThrow(() -> new RuntimeException("Game phase was not found"));
// TODO add check to trainingDefinitionId (field structure will be probably changed)
Task task = new Task();
BeanUtils.copyProperties(taskToBeCloned, task);
task.setId(null);
task.setPhaseLevel(gamePhase);
task.setOrder(taskRepository.getCurrentMaxOrder(phaseId) + 1); task.setOrder(taskRepository.getCurrentMaxOrder(phaseId) + 1);
Task persistedEntity = taskRepository.save(task); Task persistedEntity = taskRepository.save(task);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment