Merge pull request #44 from MLengl/TSK-58

TSK-58: Query tasks by workbasketId and tast-state (with Authentification)
This commit is contained in:
BerndBreier 2017-11-30 14:51:38 +01:00 committed by GitHub
commit 9470761f0c
5 changed files with 79 additions and 1 deletions

View File

@ -97,4 +97,16 @@ public interface TaskService {
*/
TaskQuery createTaskQuery();
/**
* Getting a list of all Tasks which got matching workbasketIds and states.
*
* @param workbasketId where the tasks need to be in.
* @param taskState which is required for the request,
* @return a filled/empty list of tasks with attributes which are matching given params.
*
* @throws WorkbasketNotFoundException if the workbasketId can´t be resolved to a existing workbasket.
* @throws NotAuthorizedException if the current user got no rights for reading on this workbasket.
* @throws Exception if no result can be found by @{link TaskMapper}.
*/
List<Task> getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) throws WorkbasketNotFoundException, NotAuthorizedException, Exception;
}

View File

@ -4,6 +4,7 @@ import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
@ -235,4 +236,17 @@ public class TaskServiceImpl implements TaskService {
public TaskQuery createTaskQuery() {
return new TaskQueryImpl(taskanaEngine);
}
@Override
public List<Task> getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) throws WorkbasketNotFoundException, NotAuthorizedException, Exception {
List<Task> resultList = null;
try {
taskanaEngineImpl.openConnection();
taskanaEngine.getWorkbasketService().checkAuthorization(workbasketId, WorkbasketAuthorization.READ);
resultList = taskMapper.findTasksByWorkbasketIdAndState(workbasketId, taskState);
} finally {
taskanaEngineImpl.returnConnection();
}
return (resultList == null) ? new ArrayList<>() : resultList;
}
}

View File

@ -96,4 +96,39 @@ public interface TaskMapper {
@Delete("DELETE FROM TASK WHERE ID = #{id}")
void delete(String id);
@Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
+ "FROM TASK "
+ "WHERE WORKBASKETID = #{workbasketId} "
+ "AND STATE = #{taskState}")
@Results(value = {
@Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"),
@Result(property = "claimed", column = "CLAIMED"),
@Result(property = "completed", column = "COMPLETED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "planned", column = "PLANNED"),
@Result(property = "due", column = "DUE"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "workbasketId", column = "WORKBASKETID"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)),
@Result(property = "isRead", column = "IS_READ"),
@Result(property = "isTransferred", column = "IS_TRANSFERRED"),
@Result(property = "customAttributes", column = "CUSTOM_ATTRIBUTES", jdbcType = JdbcType.BLOB, javaType = Map.class, typeHandler = MapTypeHandler.class),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")
})
List<Task> findTasksByWorkbasketIdAndState(@Param("workbasketId") String workbasketId, @Param("taskState") TaskState taskState);
}

View File

@ -21,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
import pro.taskana.TaskService;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.Task;
import pro.taskana.model.TaskState;
import pro.taskana.rest.query.TaskFilter;
@RestController
@ -62,6 +64,21 @@ public class TaskController {
}
}
@RequestMapping(value = "/workbasket/{workbasketId}/state/{taskState}")
public ResponseEntity<List<Task>> getTasksByWorkbasketIdAndState(
@PathVariable(value = "workbasketId") String workbasketId, @PathVariable(value = "taskState") TaskState taskState) {
try {
List<Task> taskList = taskService.getTasksByWorkbasketIdAndState(workbasketId, taskState);
return ResponseEntity.status(HttpStatus.OK).body(taskList);
} catch (WorkbasketNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} catch (NotAuthorizedException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@RequestMapping(method = RequestMethod.POST, value = "/{taskId}/claim")
public ResponseEntity<Task> claimTask(@PathVariable String taskId, @RequestBody String userName) {
// TODO verify user

View File

@ -71,7 +71,7 @@ public class WorkbasketController {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> createWorkbasket(@RequestBody Workbasket workbasket) {
Workbasket createdWorkbasket = workbasketService.createWorkbasket(workbasket);