diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java index eef8b71..182fb36 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/DeleteTaskController.java @@ -3,6 +3,7 @@ package ch.unisg.roster.roster.adapter.in.web; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -22,10 +23,10 @@ public class DeleteTaskController { * Controller to delete a task * @return 200 OK, 409 Conflict **/ - @DeleteMapping(path = "/task", consumes = {"application/task+json"}) - public ResponseEntity applyForTask(@RequestBody Task task) { + @DeleteMapping(path = "/task/{taskId}") + public ResponseEntity deleteTask(@PathVariable("taskId") String taskId) { - DeleteTaskCommand command = new DeleteTaskCommand(task.getTaskID(), task.getTaskType()); + DeleteTaskCommand command = new DeleteTaskCommand(taskId); if (deleteTaskUseCase.deleteTask(command)) { return new ResponseEntity<>(HttpStatus.OK); diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java index 9f59dc3..503428e 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/port/in/DeleteTaskCommand.java @@ -13,12 +13,8 @@ public class DeleteTaskCommand extends SelfValidating { @NotNull private final String taskId; - @NotNull - private final ExecutorType taskType; - - public DeleteTaskCommand(String taskId, ExecutorType taskType) { + public DeleteTaskCommand(String taskId) { this.taskId = taskId; - this.taskType = taskType; this.validateSelf(); } } diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java index a6b4841..69036e5 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/DeleteTaskService.java @@ -21,7 +21,7 @@ public class DeleteTaskService implements DeleteTaskUseCase { @Override public boolean deleteTask(DeleteTaskCommand command) { Roster roster = Roster.getInstance(); - return roster.deleteTask(command.getTaskId(), command.getTaskType()); + return roster.deleteTask(command.getTaskId()); } } diff --git a/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java index 3893566..1153caa 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java +++ b/roster/src/main/java/ch/unisg/roster/roster/domain/Roster.java @@ -76,9 +76,14 @@ public class Roster { * Deletes a task if it is still in the queue. * @return Whether the task got deleted or not **/ - public boolean deleteTask(String taskID, ExecutorType taskType) { + public boolean deleteTask(String taskID) { logger.log(Level.INFO, "Try to delete task with id {0}", taskID); - return queues.get(taskType.getValue()).removeIf(task -> task.getTaskID().equalsIgnoreCase(taskID)); + for(var listOfTasks : queues.entrySet()){ + if(listOfTasks.getValue().removeIf(task -> task.getTaskID().equals(taskID))){ + return true; + } + } + return false; } public void initialiseRoster(List rosterItemList){ diff --git a/roster/src/test/java/ch/unisg/roster/roster/domain/RosterTest.java b/roster/src/test/java/ch/unisg/roster/roster/domain/RosterTest.java index 7fd1081..d2e62e6 100644 --- a/roster/src/test/java/ch/unisg/roster/roster/domain/RosterTest.java +++ b/roster/src/test/java/ch/unisg/roster/roster/domain/RosterTest.java @@ -31,7 +31,7 @@ public class RosterTest { assertThat(task.getTaskType().getValue().toString()).isEqualTo("TEST-TYPE"); assertThat(task.getTaskID()).isEqualTo("TEST-ID"); - boolean empty_queue = roster.deleteTask("TEST-ID", new ExecutorType("TEST-TYPE")); + boolean empty_queue = roster.deleteTask("TEST-ID"); // TODO test that the task was removed from the Queue similar to below --> I don't know if it actually gets deleted or not //assertThat(empty_queue).isEqualTo(true); //assertThat(queues.size()).isEqualTo(0); @@ -44,8 +44,8 @@ public class RosterTest { queues.clear(); roster.addTaskToQueue(new Task("TEST-ID", "TEST-TYPE")); - boolean test = roster.deleteTask("TEST-ID", new ExecutorType("TEST-TYPE")); - + boolean test = roster.deleteTask("TEST-ID"); + // TODO Fix assert for queue assertThat(test).isEqualTo(true); assertThat(queues.size()).isEqualTo(1); } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java index ef79e6a..11c2442 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/DeleteTaskWebController.java @@ -25,6 +25,7 @@ public class DeleteTaskWebController { this.deleteClassUseCase = deleteClassUseCase; } + // TODO change to DELETE and why are we using task URI here? @PostMapping(path="/tasks/deleteTask", consumes = {TaskJsonRepresentation.MEDIA_TYPE}) public ResponseEntity deleteTask (@RequestBody Task task){ try { @@ -35,6 +36,7 @@ public class DeleteTaskWebController { // Check if the task with the given identifier exists if (deleteATask.isEmpty()) { // If not, through a 404 Not Found status code + // TODO is 404 the best here? throw new ResponseStatusException(HttpStatus.NOT_FOUND); } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java index a69f2e5..2b5c495 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/CanTaskBeDeletedWebAdapter.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import java.io.IOException; @@ -25,36 +26,24 @@ public class CanTaskBeDeletedWebAdapter implements CanTaskBeDeletedPort { String server; @Override - public void canTaskBeDeletedEvent(DeleteTaskEvent event){ - - var values = new HashMap<> () {{ - put("taskId", event.taskId); - put("taskUri", event.taskUri); - }}; - - var objectMapper = new ObjectMapper(); - String requestBody = null; - try { - requestBody = objectMapper.writeValueAsString(values); - } catch (JsonProcessingException e){ - e.printStackTrace(); - } - + public boolean canTaskBeDeletedEvent(DeleteTaskEvent event){ //Todo: Question: How do we include the URI from the DeleteTaskEvent? Do we even need it? HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server+"task")) + .uri(URI.create(server+"$/task/" + event.taskId)) .header("Content-Type", "application/task+json") - .POST(HttpRequest.BodyPublishers.ofString(requestBody)) + .DELETE() .build(); - //Todo: The following parameters probably need to be changed to get the right error code try { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + return response.statusCode() == HttpStatus.OK.value(); } catch (IOException e){ e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } + + return false; } } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java index 67bde16..5a0707f 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/port/out/CanTaskBeDeletedPort.java @@ -3,5 +3,5 @@ package ch.unisg.tapastasks.tasks.application.port.out; import ch.unisg.tapastasks.tasks.domain.DeleteTaskEvent; public interface CanTaskBeDeletedPort { - void canTaskBeDeletedEvent(DeleteTaskEvent event); + boolean canTaskBeDeletedEvent(DeleteTaskEvent event); } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java index 35685a3..c3d392c 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java @@ -3,6 +3,8 @@ package ch.unisg.tapastasks.tasks.application.service; import ch.unisg.tapastasks.tasks.application.port.in.DeleteTaskCommand; import ch.unisg.tapastasks.tasks.application.port.in.DeleteTaskUseCase; +import ch.unisg.tapastasks.tasks.application.port.out.CanTaskBeDeletedPort; +import ch.unisg.tapastasks.tasks.domain.DeleteTaskEvent; import ch.unisg.tapastasks.tasks.domain.Task; import ch.unisg.tapastasks.tasks.domain.TaskList; import jdk.jshell.spi.ExecutionControl; @@ -17,17 +19,21 @@ import java.util.Optional; @Transactional public class DeleteTaskService implements DeleteTaskUseCase { + private final CanTaskBeDeletedPort canTaskBeDeletedPort; + @Override public Optional deleteTask(DeleteTaskCommand command){ TaskList taskList = TaskList.getTapasTaskList(); Optional updatedTask = taskList.retrieveTaskById(command.getTaskId()); - Task newTask = updatedTask.get(); - // TODO: Fill in the right condition into the if-statement and the else-statement - if (true){ - return taskList.deleteTaskById(command.getTaskId()); + + if(updatedTask.isPresent() && updatedTask.get().getTaskStatus().getValue().equals(Task.Status.OPEN)){ + // If task exists, and it is open then we try deleting it from the roster + if(canTaskBeDeletedPort.canTaskBeDeletedEvent(new DeleteTaskEvent(command.getTaskId().getValue(), command.getTaskUri().getValue()))){ + return taskList.deleteTaskById(command.getTaskId()); + } } - // TODO Handle with a return message + return Optional.empty(); } }