2409 Update students programs

This commit is contained in:
Andreas Svanberg 2021-11-28 16:21:14 +01:00
parent adc7eb47fc
commit 061320d27d
3 changed files with 37 additions and 4 deletions
core/src/main/java/se/su/dsv/scipro/workerthreads
daisy-integration/src
main/java/se/su/dsv/scipro/integration/daisy/workers
test/java/se/su/dsv/scipro/integration/daisy/workers

@ -84,6 +84,8 @@ public abstract class AbstractWorker implements Worker {
}
}
// in case a job crashes or clears the cache (so the entity is detached)
em.refresh(wd);
if (successfulWorker) {
wd.setLastSuccessfulRun(startedWorkingDate);
}

@ -13,6 +13,7 @@ import se.su.dsv.scipro.io.dto.Person;
import se.su.dsv.scipro.io.dto.Program;
import se.su.dsv.scipro.io.dto.ProgramAdmission;
import se.su.dsv.scipro.io.dto.Thesis;
import se.su.dsv.scipro.match.ProgramService;
import se.su.dsv.scipro.system.MergeService;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserService;
@ -20,6 +21,8 @@ import se.su.dsv.scipro.system.Username;
import se.su.dsv.scipro.workerthreads.AbstractWorker;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.persistence.EntityManager;
import java.time.Year;
import java.util.*;
import java.util.stream.Collectors;
@ -35,6 +38,8 @@ public class UserImportWorker extends AbstractWorker {
private final UserService userService;
private final Tracer tracer;
private final MergeService mergeService;
private final ProgramService programService;
private final Provider<EntityManager> entityManagerProvider;
@Inject
public UserImportWorker(DaisyAPI daisyAPI,
@ -42,13 +47,17 @@ public class UserImportWorker extends AbstractWorker {
ExternalImporter externalImporter,
final Tracer tracer,
final MergeService mergeService,
UserService userService) {
UserService userService,
ProgramService programService,
Provider<EntityManager> entityManagerProvider) {
this.daisyAPI = daisyAPI;
this.importerTransactions = importerTransactions;
this.externalImporter = externalImporter;
this.userService = userService;
this.tracer = tracer;
this.mergeService = mergeService;
this.programService = programService;
this.entityManagerProvider = entityManagerProvider;
}
@Override
@ -62,7 +71,7 @@ public class UserImportWorker extends AbstractWorker {
importSupervisors(programCache);
importSupervisorUnits();
importSupervisorActiveStatus();
importPotentialNewStudents(programCache);
importPotentialNewStudentsAndUpdatePrograms(programCache);
long endDate = System.currentTimeMillis();
long executionTimeSecs = (endDate - startDate) / 1000;
@ -165,7 +174,9 @@ public class UserImportWorker extends AbstractWorker {
importerTransactions.importProject(project);
}
private void importPotentialNewStudents(final Map<Integer, Program> programCache) {
private void importPotentialNewStudentsAndUpdatePrograms(final Map<Integer, Program> programCache) {
// clear all attached entities due to performance concerns
entityManagerProvider.get().clear();
final List<Program> programs = daisyAPI.getPrograms(DSV);
programs.forEach(program -> programCache.put(program.getId(), program));
for (Program program : programs) {
@ -182,6 +193,20 @@ public class UserImportWorker extends AbstractWorker {
.peek(person -> LOGGER.info("Email set - importing"))
.forEach(person1 -> importerTransactions.importStudent(person1, programCache));
}
else {
final boolean needsProgramConnection = user.getPrograms()
.stream()
.map(se.su.dsv.scipro.system.Program::getExternalId)
.noneMatch(admission.getProgramId()::equals);
if (needsProgramConnection) {
final se.su.dsv.scipro.system.Program sciproProgram
= programService.updateExternalProgram(program.getId(), program.getName(), program.getNameEn(), program.getCode());
user.addProgram(sciproProgram);
userService.save(user);
}
}
// keep the cache small to maintain performance
entityManagerProvider.get().clear();
}
}
}

@ -11,10 +11,12 @@ import se.su.dsv.scipro.daisyExternal.ImporterTransactions;
import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
import se.su.dsv.scipro.io.dto.Person;
import se.su.dsv.scipro.io.dto.Thesis;
import se.su.dsv.scipro.match.ProgramService;
import se.su.dsv.scipro.system.MergeService;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.system.UserService;
import javax.persistence.EntityManager;
import java.util.*;
import static java.util.Arrays.asList;
@ -33,13 +35,17 @@ public class UserImportWorkerTest {
private UserService userService;
@Mock
private MergeService mergeService;
@Mock
private ProgramService programService;
@Mock
private EntityManager entityManager;
private UserImportWorker worker;
@Before
public void setUp() {
when(userService.findAll()).thenReturn(Collections.emptyList());
worker = new UserImportWorker(daisyAPI, importerTransactions, externalImporter, NoopTracerFactory.create(), mergeService, userService);
worker = new UserImportWorker(daisyAPI, importerTransactions, externalImporter, NoopTracerFactory.create(), mergeService, userService, programService, () -> entityManager);
}
@Test