2409 Update students programs
This commit is contained in:
parent
adc7eb47fc
commit
061320d27d
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
8
daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/UserImportWorkerTest.java
8
daisy-integration/src/test/java/se/su/dsv/scipro/integration/daisy/workers/UserImportWorkerTest.java
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user