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

Another bulk of REST API changed according to the new design

parent 07e47ba0
No related branches found
No related tags found
No related merge requests found
Showing
with 373 additions and 132 deletions
package com.example.demo.controller;
import com.example.demo.dto.BaseLevelDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.dto.PhaseLevelUpdateDto;
import com.example.demo.dto.QuestionChoiceDto;
import com.example.demo.dto.QuestionChoiceUpdateDto;
import com.example.demo.dto.QuestionDto;
import com.example.demo.dto.QuestionUpdateDto;
import com.example.demo.dto.QuestionnaireUpdateDto;
import com.example.demo.dto.TaskUpdateDto;
import com.example.demo.enums.QuestionType;
import com.example.demo.service.LevelOperationsService;
import io.swagger.annotations.Api;
......@@ -46,22 +43,22 @@ public class AdaptiveTrainingDefinitionsRestController {
this.levelOperationsService = levelOperationsService;
}
@ApiOperation(httpMethod = "PUT",
value = "Move level to specified order",
nickname = "moveLevelToSpecifiedOrder",
produces = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Level moved to specified order"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(value = "/levels/{levelIdFrom}/move-to/{newPosition}", produces = MediaType.APPLICATION_JSON_VALUE)
public void moveLevelToSpecifiedOrder(
@ApiParam(value = "Level ID - from", required = true) @PathVariable(name = "levelIdFrom") Long levelIdFrom,
@ApiParam(value = "Position (order) to which the level should be moved", required = true) @PathVariable(name = "newPosition") int newPosition) {
levelOperationsService.moveLevelToSpecifiedOrder(levelIdFrom, newPosition);
}
// @ApiOperation(httpMethod = "PUT",
// value = "Move level to specified order",
// nickname = "moveLevelToSpecifiedOrder",
// produces = MediaType.APPLICATION_JSON_VALUE
// )
// @ApiResponses(value = {
// @ApiResponse(code = 200, message = "Level moved to specified order"),
// @ApiResponse(code = 500, message = "Unexpected application error")
// })
// @PutMapping(value = "/levels/{levelIdFrom}/move-to/{newPosition}", produces = MediaType.APPLICATION_JSON_VALUE)
// public void moveLevelToSpecifiedOrder(
// @ApiParam(value = "Level ID - from", required = true) @PathVariable(name = "levelIdFrom") Long levelIdFrom,
// @ApiParam(value = "Position (order) to which the level should be moved", required = true) @PathVariable(name = "newPosition") int newPosition) {
//
// levelOperationsService.moveLevelToSpecifiedOrder(levelIdFrom, newPosition);
// }
// @ApiOperation(httpMethod = "DELETE",
// value = "Delete a specified level",
......@@ -115,37 +112,37 @@ public class AdaptiveTrainingDefinitionsRestController {
// return levelOperationsService.getLevel(levelId);
// }
@ApiOperation(httpMethod = "PUT",
value = "Update info level",
nickname = "updateInfoLevel",
consumes = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Info level updated"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(path = "/info-levels")
public void updateInfoLevel(
@ApiParam(value = "Info level to be updated") @RequestBody InfoLevelUpdateDto infoLevelUpdateDto) {
levelOperationsService.updateInfoLevel(infoLevelUpdateDto);
}
@ApiOperation(httpMethod = "PUT",
value = "Update phase",
nickname = "updatePhaseLevel",
consumes = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Phase level"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(path = "/phases")
public void updatePhaseLevel(
@ApiParam(value = "Info level to be updated") @RequestBody PhaseLevelUpdateDto phaseLevelUpdateDto) {
// @ApiOperation(httpMethod = "PUT",
// value = "Update info level",
// nickname = "updateInfoLevel",
// consumes = MediaType.APPLICATION_JSON_VALUE
// )
// @ApiResponses(value = {
// @ApiResponse(code = 200, message = "Info level updated"),
// @ApiResponse(code = 500, message = "Unexpected application error")
// })
// @PutMapping(path = "/info-levels")
// public void updateInfoLevel(
// @ApiParam(value = "Info level to be updated") @RequestBody InfoLevelUpdateDto infoLevelUpdateDto) {
//
// levelOperationsService.updateInfoLevel(infoLevelUpdateDto);
// }
levelOperationsService.updatePhaseLevel(phaseLevelUpdateDto);
}
// @ApiOperation(httpMethod = "PUT",
// value = "Update phase",
// nickname = "updatePhaseLevel",
// consumes = MediaType.APPLICATION_JSON_VALUE
// )
// @ApiResponses(value = {
// @ApiResponse(code = 200, message = "Phase level"),
// @ApiResponse(code = 500, message = "Unexpected application error")
// })
// @PutMapping(path = "/phases")
// public void updatePhaseLevel(
// @ApiParam(value = "Info level to be updated") @RequestBody PhaseLevelUpdateDto phaseLevelUpdateDto) {
//
// levelOperationsService.updatePhaseLevel(phaseLevelUpdateDto);
// }
// @ApiOperation(httpMethod = "PUT",
// value = "Update task",
......
package com.example.demo.controller;
import com.example.demo.dto.BaseLevelDto;
import com.example.demo.dto.InfoLevelDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.dto.PhaseCreateDTO;
import com.example.demo.dto.PhaseLevelDto;
import com.example.demo.dto.PhaseLevelUpdateDto;
import com.example.demo.facade.TrainingPhaseFacade;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -13,12 +17,15 @@ 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.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
......@@ -26,6 +33,8 @@ import java.util.List;
@RestController
@RequestMapping(value = "/training-definitions/{definitionId}/phases", produces = MediaType.APPLICATION_JSON_VALUE)
@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*",
methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PUT})
@Api(value = "/training-definitions/{definitionId}/phases",
tags = "Phases",
consumes = MediaType.APPLICATION_JSON_VALUE,
......@@ -123,4 +132,70 @@ public class PhasesController {
return new ResponseEntity<>(remainingPhases, HttpStatus.OK);
}
@ApiOperation(httpMethod = "PUT",
value = "Update info phase",
nickname = "updateInfoPhase",
response = InfoLevelDto.class,
consumes = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Info phase updated"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(path = "/{phaseId}/info")
public ResponseEntity<InfoLevelDto> updateInfoPhase(
@ApiParam(value = "Training definition ID", required = true)
@PathVariable(name = "definitionId") Long definitionId,
@ApiParam(value = "Level ID", required = true)
@PathVariable("phaseId") Long phaseId,
@ApiParam(value = "Info phase to be updated")
@RequestBody @Valid InfoLevelUpdateDto infoLevelUpdateDto) {
InfoLevelDto updatedInfoPhase = trainingPhaseFacade.updateInfoPhase(definitionId, phaseId, infoLevelUpdateDto);
return new ResponseEntity<>(updatedInfoPhase, HttpStatus.OK);
}
@ApiOperation(httpMethod = "PUT",
value = "Update training phase",
nickname = "updateTrainingPhase",
response = PhaseLevelDto.class,
consumes = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Training phase updated"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(path = "/{phaseId}/training")
public ResponseEntity<PhaseLevelDto> updateTrainingPhase(
@ApiParam(value = "Training definition ID", required = true)
@PathVariable(name = "definitionId") Long definitionId,
@ApiParam(value = "Phase ID", required = true)
@PathVariable("phaseId") Long phaseId,
@ApiParam(value = "Training phase to be updated")
@RequestBody @Valid PhaseLevelUpdateDto phaseLevelUpdateDto) {
PhaseLevelDto updatedTrainingPhase = trainingPhaseFacade.updateTrainingPhase(definitionId, phaseId, phaseLevelUpdateDto);
return new ResponseEntity<>(updatedTrainingPhase, HttpStatus.OK);
}
@ApiOperation(httpMethod = "PUT",
value = "Move phase to specified order",
nickname = "movePhaseToSpecifiedOrder",
produces = MediaType.APPLICATION_JSON_VALUE
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Phase moved to specified order"),
@ApiResponse(code = 500, message = "Unexpected application error")
})
@PutMapping(value = "/{phaseIdFrom}/move-to/{newPosition}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Void> movePhaseToSpecifiedOrder(
@ApiParam(value = "Phase ID - from", required = true) @PathVariable(name = "phaseIdFrom") Long phaseIdFrom,
@ApiParam(value = "Position (order) to which the phase should be moved", required = true) @PathVariable(name = "newPosition") int newPosition) {
trainingPhaseFacade.movePhaseToSpecifiedOrder(phaseIdFrom, newPosition);
return ResponseEntity.ok().build();
}
}
......@@ -13,6 +13,7 @@ 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.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
......@@ -20,12 +21,15 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
@RequestMapping(value = "/training-definitions/{definitionId}/phases/{phaseId}/tasks", produces = MediaType.APPLICATION_JSON_VALUE)
@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*",
methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PUT})
@Api(value = "/training-definitions/{definitionId}/phases",
tags = "Tasks",
consumes = MediaType.APPLICATION_JSON_VALUE,
......
package com.example.demo.dto;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
public class InfoLevelUpdateDto {
private Long id;
@ApiModelProperty(value = "Short description of info phase", required = true, example = "Info phase title")
@NotEmpty(message = "Info phase title must not be blank")
private String title;
private String content;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ApiModelProperty(value = "The information of info phase that is displayed to a player", required = true, example = "Read the info")
@NotEmpty(message = "Info phase content must not be blank")
private String content;
public String getTitle() {
return title;
......@@ -33,8 +33,7 @@ public class InfoLevelUpdateDto {
@Override
public String toString() {
return "InfoLevelUpdateDto{" +
"id=" + id +
", title='" + title + '\'' +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
......
package com.example.demo.dto;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.PositiveOrZero;
import java.util.List;
public class PhaseLevelUpdateDto {
private Long id;
@ApiModelProperty(value = "Short description of training phase", required = true, example = "Training phase title")
@NotEmpty(message = "Training phase title must not be blank")
private String title;
private Integer order;
@ApiModelProperty(value = "Maximal number of allowed wrong flags provided by played", required = true, example = "10")
@NotNull(message = "Maximal number of allowed wrong flags must be set")
private Integer allowedWrongFlags;
@ApiModelProperty(value = "Maximal number of allowed commands provided by played", required = true, example = "10")
@NotNull(message = "Maximal number of allowed commands must be set")
private Integer allowedCommands;
@ApiModelProperty(value = "Estimated time (minutes) taken by the player to solve the training phase", example = "20")
@NotNull(message = "Estimated duration of phase task must be set")
private Integer estimatedDuration;
private Long maxScore;
private List<DecisionMatrixRowDto> decisionMatrix;
public Long getId() {
return id;
}
@ApiModelProperty(value = "Maximal score player can achieve in the training phase", example = "200")
@PositiveOrZero
private Long maxScore;
public void setId(Long id) {
this.id = id;
}
private List<DecisionMatrixRowDto> decisionMatrix;
public String getTitle() {
return title;
......@@ -29,14 +39,6 @@ public class PhaseLevelUpdateDto {
this.title = title;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public Integer getAllowedWrongFlags() {
return allowedWrongFlags;
}
......
package com.example.demo.facade;
import com.example.demo.dto.BaseLevelDto;
import com.example.demo.dto.InfoLevelDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.dto.PhaseCreateDTO;
import com.example.demo.dto.PhaseLevelDto;
import com.example.demo.dto.PhaseLevelUpdateDto;
import com.example.demo.enums.PhaseType;
import com.example.demo.service.InfoLevelService;
import com.example.demo.service.PhaseLevelService;
import com.example.demo.service.PhaseService;
import com.example.demo.service.QuestionnaireLevelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class TrainingPhaseFacade {
@Autowired
private PhaseService phaseService;
@Autowired
private InfoLevelService infoLevelService;
@Autowired
private QuestionnaireLevelService questionnaireLevelService;
@Autowired
private PhaseLevelService phaseLevelService;
public BaseLevelDto createPhase(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) {
BaseLevelDto baseLevelDto;
if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) {
baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId);
} else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) {
baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId);
} else {
baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId);
}
baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType());
return baseLevelDto;
}
@Transactional
public List<BaseLevelDto> deletePhase(Long definitionId, Long phaseId) {
phaseService.deletePhase(definitionId, phaseId);
return getPhases(definitionId);
}
public BaseLevelDto getPhase(Long definitionId, Long phaseId) {
return phaseService.getPhase(definitionId, phaseId);
}
public List<BaseLevelDto> getPhases(Long definitionId) {
return phaseService.getPhases(definitionId);
}
public InfoLevelDto updateInfoPhase(Long definitionId, Long phaseId, InfoLevelUpdateDto infoLevelUpdateDto) {
return infoLevelService.updateInfoLevel(definitionId, phaseId, infoLevelUpdateDto);
}
public PhaseLevelDto updateTrainingPhase(Long definitionId, Long phaseId, PhaseLevelUpdateDto trainingPhaseUpdate) {
return phaseLevelService.updatePhaseLevel(definitionId, phaseId, trainingPhaseUpdate);
}
public void movePhaseToSpecifiedOrder(Long phaseIdFrom, int newPosition) {
phaseService.moveLevelToSpecifiedOrder(phaseIdFrom, newPosition);
}
}
......@@ -3,6 +3,7 @@ package com.example.demo.service;
import com.example.demo.domain.InfoLevel;
import com.example.demo.dto.InfoLevelCreateDto;
import com.example.demo.dto.InfoLevelDto;
import com.example.demo.dto.InfoLevelUpdateDto;
import com.example.demo.mapper.BeanMapper;
import com.example.demo.repository.BaseLevelRepository;
import com.example.demo.repository.InfoLevelRepository;
......@@ -24,8 +25,6 @@ public class InfoLevelService {
private final InfoLevelRepository infoLevelRepository;
private final BaseLevelRepository baseLevelRepository;
@Autowired
public InfoLevelService(InfoLevelRepository infoLevelRepository, BaseLevelRepository baseLevelRepository) {
this.infoLevelRepository = infoLevelRepository;
......@@ -78,17 +77,18 @@ public class InfoLevelService {
return BeanMapper.INSTANCE.toDto(infoLevel.get());
}
public InfoLevelDto updateInfoLevel(InfoLevel infoLevelUpdate) {
Optional<InfoLevel> persistedInfoLevel = infoLevelRepository.findById(infoLevelUpdate.getId());
public InfoLevelDto updateInfoLevel(Long definitionId, Long phaseId, InfoLevelUpdateDto infoLevelUpdateDto) {
InfoLevel infoLevelUpdate = BeanMapper.INSTANCE.toEntity(infoLevelUpdateDto);
infoLevelUpdate.setId(phaseId);
if (persistedInfoLevel.isEmpty()) {
// TODO return 404
LOG.error("No info level found with ID {}.", infoLevelUpdate.getId());
return new InfoLevelDto();
}
InfoLevel persistedInfoLevel = infoLevelRepository.findById(infoLevelUpdate.getId())
.orElseThrow(() -> new RuntimeException("Info phase was not found"));
// TODO throw proper exception once kypo2-training is migrated
// TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed)
infoLevelUpdate.setTrainingDefinitionId(persistedInfoLevel.get().getTrainingDefinitionId());
infoLevelUpdate.setOrder(persistedInfoLevel.get().getOrder());
infoLevelUpdate.setTrainingDefinitionId(persistedInfoLevel.getTrainingDefinitionId());
infoLevelUpdate.setOrder(persistedInfoLevel.getOrder());
InfoLevel savedEntity = infoLevelRepository.save(infoLevelUpdate);
......
......@@ -50,31 +50,31 @@ public class LevelOperationsService {
@Autowired
private QuestionChoiceService questionChoiceService;
@Transactional
public void moveLevelToSpecifiedOrder(Long levelIdFrom, int newPosition) {
Optional<BaseLevel> levelFrom = baseLevelRepository.findById(levelIdFrom);
if (levelFrom.isEmpty()) {
// TODO throw a proper exception
return;
}
int fromOrder = levelFrom.get().getOrder();
if (fromOrder < newPosition) {
baseLevelRepository.decreaseOrderOfLevelsOnInterval(levelFrom.get().getTrainingDefinitionId(), fromOrder, newPosition);
} else if (fromOrder > newPosition) {
baseLevelRepository.increaseOrderOfLevelsOnInterval(levelFrom.get().getTrainingDefinitionId(), newPosition, fromOrder);
} else {
// nothing should be changed, no further actions needed
return;
}
levelFrom.get().setOrder(newPosition);
baseLevelRepository.save(levelFrom.get());
phaseLevelService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.get().getTrainingDefinitionId());
}
// @Transactional
// public void moveLevelToSpecifiedOrder(Long levelIdFrom, int newPosition) {
// Optional<BaseLevel> levelFrom = baseLevelRepository.findById(levelIdFrom);
//
// if (levelFrom.isEmpty()) {
// // TODO throw a proper exception
// return;
// }
//
// int fromOrder = levelFrom.get().getOrder();
//
// if (fromOrder < newPosition) {
// baseLevelRepository.decreaseOrderOfLevelsOnInterval(levelFrom.get().getTrainingDefinitionId(), fromOrder, newPosition);
// } else if (fromOrder > newPosition) {
// baseLevelRepository.increaseOrderOfLevelsOnInterval(levelFrom.get().getTrainingDefinitionId(), newPosition, fromOrder);
// } else {
// // nothing should be changed, no further actions needed
// return;
// }
//
// levelFrom.get().setOrder(newPosition);
// baseLevelRepository.save(levelFrom.get());
//
// phaseLevelService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.get().getTrainingDefinitionId());
// }
// @Transactional
// public void deleteLevel(Long levelId) {
......@@ -141,15 +141,15 @@ public class LevelOperationsService {
return BeanMapper.INSTANCE.toDto(level.get());
}
public void updateInfoLevel(InfoLevelUpdateDto infoLevelUpdateDto) {
InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelUpdateDto);
infoLevelService.updateInfoLevel(infoLevel);
}
// public void updateInfoLevel(InfoLevelUpdateDto infoLevelUpdateDto) {
// InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelUpdateDto);
// infoLevelService.updateInfoLevel(infoLevel);
// }
public void updatePhaseLevel(PhaseLevelUpdateDto phaseLevelUpdateDto) {
PhaseLevel phaseLevel = BeanMapper.INSTANCE.toEntity(phaseLevelUpdateDto);
phaseLevelService.updatePhaseLevel(phaseLevel);
}
// public void updatePhaseLevel(PhaseLevelUpdateDto phaseLevelUpdateDto) {
// PhaseLevel phaseLevel = BeanMapper.INSTANCE.toEntity(phaseLevelUpdateDto);
// phaseLevelService.updatePhaseLevel(phaseLevel);
// }
public QuestionDto createQuestion(Long questionnaireId, QuestionType questionType) {
QuestionDto createdQuestion = questionService.createDefaultQuestion(questionnaireId, questionType);
......
package com.example.demo.service;
import com.example.demo.domain.BaseLevel;
import com.example.demo.domain.DecisionMatrixRow;
import com.example.demo.domain.PhaseLevel;
import com.example.demo.dto.PhaseLevelDto;
import com.example.demo.dto.PhaseLevelUpdateDto;
import com.example.demo.mapper.BeanMapper;
import com.example.demo.repository.BaseLevelRepository;
import com.example.demo.repository.PhaseLevelRepository;
......@@ -10,6 +12,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
......@@ -44,18 +47,19 @@ public class PhaseLevelService {
return BeanMapper.INSTANCE.toDto(persistedEntity);
}
public PhaseLevelDto updatePhaseLevel(PhaseLevel phaseLevel) {
Optional<PhaseLevel> persistedPhaseLevel = phaseLevelRepository.findById(phaseLevel.getId());
public PhaseLevelDto updatePhaseLevel(Long definitionId, Long phaseId, PhaseLevelUpdateDto trainingPhaseUpdate) {
PhaseLevel phaseLevel = BeanMapper.INSTANCE.toEntity(trainingPhaseUpdate);
phaseLevel.setId(phaseId);
if (persistedPhaseLevel.isEmpty()) {
// TODO return 404
LOG.error("No phase level found with ID {}.", phaseLevel.getId());
return new PhaseLevelDto();
}
PhaseLevel persistedPhaseLevel = phaseLevelRepository.findById(phaseLevel.getId())
.orElseThrow(() -> new RuntimeException("Training phase was not found"));
// TODO throw proper exception once kypo2-training is migrated
// TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed);
phaseLevel.setTrainingDefinitionId(persistedPhaseLevel.get().getTrainingDefinitionId());
phaseLevel.setOrder(persistedPhaseLevel.get().getOrder());
phaseLevel.setSubLevels(persistedPhaseLevel.get().getSubLevels());
phaseLevel.setTrainingDefinitionId(persistedPhaseLevel.getTrainingDefinitionId());
phaseLevel.setOrder(persistedPhaseLevel.getOrder());
phaseLevel.setSubLevels(persistedPhaseLevel.getSubLevels());
if (!CollectionUtils.isEmpty(phaseLevel.getDecisionMatrix())) {
phaseLevel.getDecisionMatrix().forEach(x -> x.setPhaseLevel(phaseLevel));
......
package com.example.demo.service;
import com.example.demo.domain.BaseLevel;
import com.example.demo.domain.PhaseLevel;
import com.example.demo.dto.BaseLevelDto;
import com.example.demo.mapper.BeanMapper;
import com.example.demo.repository.BaseLevelRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class PhaseService {
@Autowired
private BaseLevelRepository baseLevelRepository;
@Autowired
private PhaseLevelService phaseLevelService;
@Transactional
public void deletePhase(Long definitionId, Long phaseId) {
BaseLevel phase = baseLevelRepository.findById(phaseId)
.orElseThrow(() -> new RuntimeException("Phase was not found"));
// TODO throw proper exception once kypo2-training is migrated
// TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed)
int levelOrder = phase.getOrder();
baseLevelRepository.decreaseOrderAfterLevelWasDeleted(definitionId, levelOrder);
baseLevelRepository.delete(phase);
}
public BaseLevelDto getPhase(Long definitionId, Long phaseId) {
BaseLevel phase = baseLevelRepository.findById(phaseId)
.orElseThrow(() -> new RuntimeException("Phase was not found"));
// TODO throw proper exception once kypo2-training is migrated
// TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed)
return BeanMapper.INSTANCE.toDto(phase);
}
public List<BaseLevelDto> getPhases(Long trainingDefinitionId) {
List<BaseLevel> phases = baseLevelRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId);
return BeanMapper.INSTANCE.toDtoList(phases);
}
@Transactional
public void moveLevelToSpecifiedOrder(Long phaseIdFrom, int newPosition) {
BaseLevel levelFrom = baseLevelRepository.findById(phaseIdFrom)
.orElseThrow(() -> new RuntimeException("Phase was not found"));
// TODO throw proper exception once kypo2-training is migrated
int fromOrder = levelFrom.getOrder();
if (fromOrder < newPosition) {
baseLevelRepository.decreaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), fromOrder, newPosition);
} else if (fromOrder > newPosition) {
baseLevelRepository.increaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), newPosition, fromOrder);
} else {
// nothing should be changed, no further actions needed
return;
}
levelFrom.setOrder(newPosition);
baseLevelRepository.save(levelFrom);
phaseLevelService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.getTrainingDefinitionId());
}
}
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