From 09cf81d4f3cdacda1acefe1ba44cd0c22a89716a Mon Sep 17 00:00:00 2001 From: Andreas Svanberg <andreass@dsv.su.se> Date: Mon, 25 Nov 2024 16:02:40 +0100 Subject: [PATCH] Do not add duplicate supervisors in Daisy Daisy's API does not support the function "change supervisor" and only what comes down to SQL INSERT and DELETE on a specific table. If the removal of the previous supervisor(s) failed the new one was still added. This change makes it so that if the removal of any (there is no limit in the API) current supervisor fails it will not attempt to add the new supervisor. --- .../dsv/scipro/daisyExternal/http/DaisyAPI.java | 2 +- .../scipro/daisyExternal/http/DaisyAPIImpl.java | 4 ++-- .../daisy/workers/ProjectExporter.java | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java index a69b109f06..8c7fdf7b79 100644 --- a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java +++ b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPI.java @@ -30,7 +30,7 @@ public interface DaisyAPI { Response addContributor(Integer projectId, ProjectParticipant contributor); - void deleteThesisPerson(Integer projectId, Integer personId); + Response deleteThesisPerson(Integer projectId, Integer personId); Response createProject(ThesisToBeCreated project); diff --git a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java index 7c2f6a7142..393e5e66ed 100755 --- a/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/daisyExternal/http/DaisyAPIImpl.java @@ -157,8 +157,8 @@ public class DaisyAPIImpl implements DaisyAPI { } @Override - public void deleteThesisPerson(Integer projectId, Integer personId) { - thesis() + public Response deleteThesisPerson(Integer projectId, Integer personId) { + return thesis() .path(String.valueOf(projectId)) .path(PERSON) .path(String.valueOf(personId)) diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java index 063b799079..69ba8164df 100644 --- a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java +++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/workers/ProjectExporter.java @@ -23,6 +23,7 @@ import se.su.dsv.scipro.workerthreads.AbstractWorker; import jakarta.inject.Inject; import jakarta.inject.Named; +import jakarta.ws.rs.core.Response; import java.time.Instant; import java.time.Period; import java.util.Calendar; @@ -247,7 +248,20 @@ public class ProjectExporter extends AbstractWorker { if (contributor.getPerson().getId().equals(project.getHeadSupervisor().getIdentifier())) { add = false; } else { - daisyAPI.deleteThesisPerson(project.getIdentifier(), contributor.getPerson().getId()); + Response response = daisyAPI.deleteThesisPerson(project.getIdentifier(), contributor.getPerson().getId()); + if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) { + LOG.warn("Failed to delete supervisor from project: {} (id: {} / {})", + project.getTitle(), + project.getId(), + project.getIdentifier()); + + // Card 3413 + // Do not attempt to add the new supervisor if the old one is still there to prevent + // the project from having multiple supervisors. + // Hopefully Daisy API will soon have support for the function "change supervisor" + // rather than just INSERT and DELETE rows in a table. + add = false; + } } } }