Skip to content
Snippets Groups Projects
Commit 5771c903 authored by Dominik Pilar's avatar Dominik Pilar
Browse files

Created ExportImportService class.

parent cd906ca7
No related branches found
No related tags found
2 merge requests!14Resolve "Integrate the necessary parts of the kypo2-training",!9Resolve "Create missing service classes"
package cz.muni.ics.kypo.training.adaptive.service.api;
import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingRun;
import cz.muni.ics.kypo.training.adaptive.dto.responses.LockedPoolInfo;
import cz.muni.ics.kypo.training.adaptive.dto.responses.PoolInfoDTO;
import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxDefinitionInfo;
import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxInfo;
import cz.muni.ics.kypo.training.adaptive.exceptions.CustomWebClientException;
import cz.muni.ics.kypo.training.adaptive.exceptions.ForbiddenException;
import cz.muni.ics.kypo.training.adaptive.exceptions.MicroserviceApiException;
import cz.muni.ics.kypo.training.adaptive.exceptions.errors.PythonApiError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.util.List;
import java.util.Map;
/**
* The type User service.
......@@ -105,4 +103,26 @@ public class SandboxServiceApi {
}
}
}
/**
* Gets sandbox definition id.
*
* @param poolId the pool id
* @return the sandbox definition id
*/
public SandboxDefinitionInfo getSandboxDefinitionId(Long poolId) {
try {
return sandboxServiceWebClient
.get()
.uri("/pools/{poolId}/definition", poolId)
.retrieve()
.bodyToMono(SandboxDefinitionInfo.class)
.block();
} catch (CustomWebClientException ex) {
if (ex.getStatusCode() == HttpStatus.CONFLICT) {
throw new ForbiddenException("There is no available sandbox definition for particular pool (ID: " + poolId + ").");
}
throw new MicroserviceApiException("Error when calling Python API to sandbox for particular pool (ID: " + poolId + ")", new PythonApiError(ex.getMessage()));
}
}
}
package cz.muni.ics.kypo.training.adaptive.service.training;
import cz.muni.ics.kypo.training.adaptive.domain.phases.AbstractPhase;
import cz.muni.ics.kypo.training.adaptive.domain.phases.InfoPhase;
import cz.muni.ics.kypo.training.adaptive.domain.phases.QuestionnairePhase;
import cz.muni.ics.kypo.training.adaptive.domain.phases.TrainingPhase;
import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingDefinition;
import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingInstance;
import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingRun;
import cz.muni.ics.kypo.training.adaptive.exceptions.*;
import cz.muni.ics.kypo.training.adaptive.repository.phases.AbstractPhaseRepository;
import cz.muni.ics.kypo.training.adaptive.repository.phases.InfoPhaseRepository;
import cz.muni.ics.kypo.training.adaptive.repository.phases.QuestionnairePhaseRepository;
import cz.muni.ics.kypo.training.adaptive.repository.phases.TrainingPhaseRepository;
import cz.muni.ics.kypo.training.adaptive.repository.training.TrainingDefinitionRepository;
import cz.muni.ics.kypo.training.adaptive.repository.training.TrainingInstanceRepository;
import cz.muni.ics.kypo.training.adaptive.repository.training.TrainingRunRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Set;
/**
* The type Export import service.
*/
@Service
public class ExportImportService {
private TrainingDefinitionRepository trainingDefinitionRepository;
private AbstractPhaseRepository abstractPhaseRepository;
private QuestionnairePhaseRepository questionnairePhaseRepository;
private InfoPhaseRepository infoPhaseRepository;
private TrainingPhaseRepository trainingPhaseRepository;
private TrainingInstanceRepository trainingInstanceRepository;
private TrainingRunRepository trainingRunRepository;
/**
* Instantiates a new Export import service.
*
* @param trainingDefinitionRepository the training definition repository
* @param abstractPhaseRepository the abstract level repository
* @param questionnairePhaseRepository the assessment level repository
* @param infoPhaseRepository the info level repository
* @param trainingPhaseRepository the game level repository
* @param trainingInstanceRepository the training instance repository
* @param trainingRunRepository the training run repository
*/
@Autowired
public ExportImportService(TrainingDefinitionRepository trainingDefinitionRepository,
AbstractPhaseRepository abstractPhaseRepository,
QuestionnairePhaseRepository questionnairePhaseRepository,
InfoPhaseRepository infoPhaseRepository,
TrainingPhaseRepository trainingPhaseRepository,
TrainingInstanceRepository trainingInstanceRepository,
TrainingRunRepository trainingRunRepository)
{
this.trainingDefinitionRepository = trainingDefinitionRepository;
this.abstractPhaseRepository = abstractPhaseRepository;
this.questionnairePhaseRepository = questionnairePhaseRepository;
this.trainingPhaseRepository = trainingPhaseRepository;
this.infoPhaseRepository = infoPhaseRepository;
this.trainingInstanceRepository = trainingInstanceRepository;
this.trainingRunRepository = trainingRunRepository;
}
/**
* Finds training definition with given id.
*
* @param trainingDefinitionId the id of definition to be found.
* @return the {@link TrainingDefinition} with the given id.
* @throws EntityNotFoundException if training definition was not found.
*/
public TrainingDefinition findById(Long trainingDefinitionId) {
return trainingDefinitionRepository.findById(trainingDefinitionId)
.orElseThrow(() -> new EntityNotFoundException(new EntityErrorDetail(TrainingDefinition.class, "id", trainingDefinitionId.getClass(),
trainingDefinitionId)));
}
/**
* Creates a phase and connects it with training definition.
*
* @param phase the {@link AbstractPhase} to be created.
* @param definition the {@link TrainingDefinition} to associate phase with.
*/
public void createLevel(AbstractPhase phase, TrainingDefinition definition) {
phase.setOrder(abstractPhaseRepository.getCurrentMaxOrder(definition.getId()) + 1);
phase.setTrainingDefinition(definition);
if (phase instanceof QuestionnairePhase) {
questionnairePhaseRepository.save((QuestionnairePhase) phase);
} else if (phase instanceof InfoPhase) {
infoPhaseRepository.save((InfoPhase) phase);
} else {
trainingPhaseRepository.save((TrainingPhase) phase);
}
}
/**
* Finds training instance with given id.
*
* @param trainingInstanceId the id of instance to be found.
* @return the {@link TrainingInstance} with the given id.
* @throws EntityNotFoundException if training instance was not found.
*/
public TrainingInstance findInstanceById(Long trainingInstanceId) {
return trainingInstanceRepository.findById(trainingInstanceId)
.orElseThrow(() -> new EntityNotFoundException(new EntityErrorDetail(TrainingInstance.class, "id", trainingInstanceId.getClass(),
trainingInstanceId)));
}
/**
* Finds training runs associated with training instance with given id.
*
* @param trainingInstanceId the id of instance which runs are to be found.
* @return the set off all {@link TrainingRun}
*/
public Set<TrainingRun> findRunsByInstanceId(Long trainingInstanceId) {
return trainingRunRepository.findAllByTrainingInstanceId(trainingInstanceId);
}
}
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