Skip to content
Snippets Groups Projects
Commit b7d0cdfd authored by Dominik Pilár's avatar Dominik Pilár
Browse files

Merge branch '32-add-database-and-backend-support-to-sankey-graph' into 'master'

add the new table to the .sql scripts.

Closes #32

See merge request muni-kypo/kypolab/kypo-adaptive-training!28
parents 8fe4fdd5 d39fe4d5
No related branches found
No related tags found
1 merge request!28add the new table to the .sql scripts.
Pipeline #75132 passed with stages
in 2 minutes and 7 seconds
package cz.muni.ics.kypo.training.adaptive.domain;
import cz.muni.ics.kypo.training.adaptive.domain.phase.AbstractPhase;
import cz.muni.ics.kypo.training.adaptive.domain.phase.Task;
import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingRun;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "participant_task_assignment")
public class ParticipantTaskAssignment implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "participantTaskAssignmentGenerator")
@SequenceGenerator(name = "participantTaskAssignmentGenerator", sequenceName = "participant_task_assignment_seq")
@Column(name = "participant_task_assignment_id", nullable = false, unique = true)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "phase_id")
private AbstractPhase abstractPhase;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "task_id")
private Task task;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "training_run_id")
private TrainingRun trainingRun;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public AbstractPhase getAbstractPhase() {
return abstractPhase;
}
public void setAbstractPhase(AbstractPhase abstractPhase) {
this.abstractPhase = abstractPhase;
}
public Task getTask() {
return task;
}
public void setTask(Task task) {
this.task = task;
}
public TrainingRun getTrainingRun() {
return trainingRun;
}
public void setTrainingRun(TrainingRun trainingRun) {
this.trainingRun = trainingRun;
}
@Override
public String toString() {
return "ParticipantTaskAssignment{" +
"id=" + id +
'}';
}
}
...@@ -265,8 +265,7 @@ public class TrainingRunFacade { ...@@ -265,8 +265,7 @@ public class TrainingRunFacade {
"or @securityService.isTraineeOfGivenTrainingRun(#trainingRunId)") "or @securityService.isTraineeOfGivenTrainingRun(#trainingRunId)")
@TransactionalWO @TransactionalWO
public AbstractPhaseDTO getNextPhase(Long trainingRunId) { public AbstractPhaseDTO getNextPhase(Long trainingRunId) {
AbstractPhase abstractPhase; AbstractPhase abstractPhase = trainingRunService.getNextPhase(trainingRunId);
abstractPhase = trainingRunService.getNextPhase(trainingRunId);
return getCorrectAbstractPhaseDTO(abstractPhase); return getCorrectAbstractPhaseDTO(abstractPhase);
} }
......
package cz.muni.ics.kypo.training.adaptive.repository;
import cz.muni.ics.kypo.training.adaptive.domain.ParticipantTaskAssignment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface ParticipantTaskAssignmentRepository extends JpaRepository<ParticipantTaskAssignment, Long>, QuerydslPredicateExecutor<ParticipantTaskAssignment> {
//TODO provide a SQL commands that returns all the relations between task transitions
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package cz.muni.ics.kypo.training.adaptive.service.training; ...@@ -2,6 +2,7 @@ package cz.muni.ics.kypo.training.adaptive.service.training;
import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Predicate;
import cz.muni.ics.kypo.training.adaptive.annotations.transactions.TransactionalWO; import cz.muni.ics.kypo.training.adaptive.annotations.transactions.TransactionalWO;
import cz.muni.ics.kypo.training.adaptive.domain.ParticipantTaskAssignment;
import cz.muni.ics.kypo.training.adaptive.domain.TRAcquisitionLock; import cz.muni.ics.kypo.training.adaptive.domain.TRAcquisitionLock;
import cz.muni.ics.kypo.training.adaptive.domain.User; import cz.muni.ics.kypo.training.adaptive.domain.User;
import cz.muni.ics.kypo.training.adaptive.domain.phase.*; import cz.muni.ics.kypo.training.adaptive.domain.phase.*;
...@@ -10,6 +11,7 @@ import cz.muni.ics.kypo.training.adaptive.domain.training.TrainingInstance; ...@@ -10,6 +11,7 @@ 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.domain.training.TrainingRun;
import cz.muni.ics.kypo.training.adaptive.enums.TRState; import cz.muni.ics.kypo.training.adaptive.enums.TRState;
import cz.muni.ics.kypo.training.adaptive.exceptions.*; import cz.muni.ics.kypo.training.adaptive.exceptions.*;
import cz.muni.ics.kypo.training.adaptive.repository.ParticipantTaskAssignmentRepository;
import cz.muni.ics.kypo.training.adaptive.repository.TRAcquisitionLockRepository; import cz.muni.ics.kypo.training.adaptive.repository.TRAcquisitionLockRepository;
import cz.muni.ics.kypo.training.adaptive.repository.UserRefRepository; import cz.muni.ics.kypo.training.adaptive.repository.UserRefRepository;
import cz.muni.ics.kypo.training.adaptive.repository.phases.AbstractPhaseRepository; import cz.muni.ics.kypo.training.adaptive.repository.phases.AbstractPhaseRepository;
...@@ -51,6 +53,7 @@ public class TrainingRunService { ...@@ -51,6 +53,7 @@ public class TrainingRunService {
private final ElasticsearchServiceApi elasticsearchServiceApi; private final ElasticsearchServiceApi elasticsearchServiceApi;
private final UserManagementServiceApi userManagementServiceApi; private final UserManagementServiceApi userManagementServiceApi;
private final TRAcquisitionLockRepository trAcquisitionLockRepository; private final TRAcquisitionLockRepository trAcquisitionLockRepository;
private final ParticipantTaskAssignmentRepository participantTaskAssignmentRepository;
/** /**
* Instantiates a new Training run service. * Instantiates a new Training run service.
...@@ -72,7 +75,8 @@ public class TrainingRunService { ...@@ -72,7 +75,8 @@ public class TrainingRunService {
AuditEventsService auditEventsService, AuditEventsService auditEventsService,
ElasticsearchServiceApi elasticsearchServiceApi, ElasticsearchServiceApi elasticsearchServiceApi,
UserManagementServiceApi userManagementServiceApi, UserManagementServiceApi userManagementServiceApi,
TRAcquisitionLockRepository trAcquisitionLockRepository) { TRAcquisitionLockRepository trAcquisitionLockRepository,
ParticipantTaskAssignmentRepository participantTaskAssignmentRepository) {
this.sandboxServiceApi = sandboxServiceApi; this.sandboxServiceApi = sandboxServiceApi;
this.trainingRunRepository = trainingRunRepository; this.trainingRunRepository = trainingRunRepository;
this.abstractPhaseRepository = abstractPhaseRepository; this.abstractPhaseRepository = abstractPhaseRepository;
...@@ -82,6 +86,7 @@ public class TrainingRunService { ...@@ -82,6 +86,7 @@ public class TrainingRunService {
this.elasticsearchServiceApi = elasticsearchServiceApi; this.elasticsearchServiceApi = elasticsearchServiceApi;
this.userManagementServiceApi = userManagementServiceApi; this.userManagementServiceApi = userManagementServiceApi;
this.trAcquisitionLockRepository = trAcquisitionLockRepository; this.trAcquisitionLockRepository = trAcquisitionLockRepository;
this.participantTaskAssignmentRepository = participantTaskAssignmentRepository;
} }
/** /**
...@@ -201,11 +206,20 @@ public class TrainingRunService { ...@@ -201,11 +206,20 @@ public class TrainingRunService {
trainingRun.setCurrentPhase(nextPhase); trainingRun.setCurrentPhase(nextPhase);
trainingRun.setIncorrectAnswerCount(0); trainingRun.setIncorrectAnswerCount(0);
trainingRunRepository.save(trainingRun); trainingRunRepository.save(trainingRun);
participantTaskAssignmentRepository.save(prepareDataForSankeyGraph(trainingRun, nextPhase));
auditEventsService.auditPhaseStartedAction(trainingRun); auditEventsService.auditPhaseStartedAction(trainingRun);
return nextPhase; return nextPhase;
} }
private ParticipantTaskAssignment prepareDataForSankeyGraph(TrainingRun trainingRun, AbstractPhase nextPhase) {
ParticipantTaskAssignment participantTaskAssignment = new ParticipantTaskAssignment();
participantTaskAssignment.setTrainingRun(trainingRun);
participantTaskAssignment.setAbstractPhase(nextPhase);
participantTaskAssignment.setTask(trainingRun.getCurrentTask());
return participantTaskAssignment;
}
/** /**
* Finds all Training Runs of specific Training Definition of logged in user. * Finds all Training Runs of specific Training Definition of logged in user.
* *
......
...@@ -5,6 +5,17 @@ create table "user" ( ...@@ -5,6 +5,17 @@ create table "user" (
primary key (user_id) primary key (user_id)
); );
create table participant_task_assignment (
participant_task_assignment_id bigserial not null,
phase_id int8 not null,
training_run_id int8 not null,
task_id int8,
primary key (participant_task_assignment_id),
foreign key (phase_id) references abstract_phase,
foreign key (training_run_id) references training_run,
foreign key (task_id) references task,
);
-- TRAINING -- TRAINING
create table training_definition ( create table training_definition (
training_definition_id bigserial not null, training_definition_id bigserial not null,
......
...@@ -12,3 +12,4 @@ CREATE SEQUENCE training_run_seq AS bigint INCREMENT 50 MINVALUE 1; ...@@ -12,3 +12,4 @@ CREATE SEQUENCE training_run_seq AS bigint INCREMENT 50 MINVALUE 1;
CREATE SEQUENCE access_token_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE access_token_seq AS bigint INCREMENT 50 MINVALUE 1;
CREATE SEQUENCE tr_acquisition_lock_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE tr_acquisition_lock_seq AS bigint INCREMENT 50 MINVALUE 1;
CREATE SEQUENCE user_seq AS bigint INCREMENT 50 MINVALUE 1; CREATE SEQUENCE user_seq AS bigint INCREMENT 50 MINVALUE 1;
CREATE SEQUENCE participant_task_assignment_seq AS bigint INCREMENT 50 MINVALUE 1;
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