0% found this document useful (0 votes)
12 views4 pages

Task REST Controller Implementation

The TaskController class provides a RESTful API for managing tasks, including creating, retrieving, updating, and deleting tasks. It supports various operations such as filtering tasks by category, status, or tags, and retrieving task statistics. The controller uses a TaskService to handle business logic and includes exception handling for error management.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views4 pages

Task REST Controller Implementation

The TaskController class provides a RESTful API for managing tasks, including creating, retrieving, updating, and deleting tasks. It supports various operations such as filtering tasks by category, status, or tags, and retrieving task statistics. The controller uses a TaskService to handle business logic and includes exception handling for error management.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

package [Link].

controller;

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];

import [Link];
import [Link];
import [Link];

@RestController
@RequestMapping("/api/v1/tasks")
@RequiredArgsConstructor
@Validated
@Tag(name = "Task Management API", description = "APIs for managing tasks")
public class TaskController {

private final TaskService taskService;

// Request/Response DTOs
@[Link]
public static class TaskRequest {
private String title;
private String description;
private Priority priority;
private String category;
private Set<String> tags;
private LocalDateTime dueDate;
}

@[Link]
public static class TaskResponse {
private String id;
private String title;
private String description;
private Priority priority;
private String category;
private Set<String> tags;
private LocalDateTime dueDate;
private Status status;
}

// Create a new task


@PostMapping
@Operation(summary = "Create a new task")
@ApiResponse(responseCode = "201", description = "Task created successfully")
public ResponseEntity<TaskResponse> createTask(@Valid @RequestBody TaskRequest
request) {
Task task = [Link](
[Link](),
[Link](),
[Link](),
[Link](),
[Link](),
[Link]()
);
return new ResponseEntity<>(convertToResponse(task), [Link]);
}

// Get all tasks


@GetMapping
@Operation(summary = "Get all tasks")
public ResponseEntity<List<TaskResponse>> getAllTasks(
@RequestParam(required = false) String category,
@RequestParam(required = false) Status status,
@RequestParam(required = false) Priority priority) {

List<Task> tasks = [Link](category, status, priority);


List<TaskResponse> response = [Link]()
.map(this::convertToResponse)
.toList();
return [Link](response);
}

// Get task by ID
@GetMapping("/{id}")
@Operation(summary = "Get task by ID")
public ResponseEntity<TaskResponse> getTaskById(@PathVariable String id) {
return [Link](id)
.map(task -> [Link](convertToResponse(task)))
.orElse([Link]().build());
}

// Update task
@PutMapping("/{id}")
@Operation(summary = "Update an existing task")
public ResponseEntity<TaskResponse> updateTask(
@PathVariable String id,
@Valid @RequestBody TaskRequest request) {

Task updatedTask = [Link](


id,
[Link](),
[Link](),
[Link](),
[Link](),
[Link](),
[Link]()
);
return [Link](convertToResponse(updatedTask));
}

// Update task status


@PatchMapping("/{id}/status")
@Operation(summary = "Update task status")
public ResponseEntity<TaskResponse> updateTaskStatus(
@PathVariable String id,
@RequestParam Status status) {
Task updatedTask = [Link](id, status);
return [Link](convertToResponse(updatedTask));
}

// Delete task
@DeleteMapping("/{id}")
@Operation(summary = "Delete a task")
@ApiResponse(responseCode = "204", description = "Task deleted successfully")
public ResponseEntity<Void> deleteTask(@PathVariable String id) {
[Link](id);
return [Link]().build();
}

// Get tasks by tag


@GetMapping("/tags/{tag}")
@Operation(summary = "Get tasks by tag")
public ResponseEntity<List<TaskResponse>> getTasksByTag(@PathVariable String
tag) {
List<Task> tasks = [Link](tag);
List<TaskResponse> response = [Link]()
.map(this::convertToResponse)
.toList();
return [Link](response);
}

// Get tasks statistics


@GetMapping("/statistics")
@Operation(summary = "Get task statistics")
public ResponseEntity<Map<String, Integer>> getTaskStatistics() {
return [Link]([Link]());
}

// Get next pending task


@GetMapping("/next")
@Operation(summary = "Get next pending task")
public ResponseEntity<TaskResponse> getNextPendingTask() {
return [Link]([Link]())
.map(task -> [Link](convertToResponse(task)))
.orElse([Link]().build());
}

// Exception handling
@ExceptionHandler([Link])
public ResponseEntity<String> handleException(Exception e) {
return new ResponseEntity<>([Link](),
HttpStatus.INTERNAL_SERVER_ERROR);
}

// Utility method to convert Task to TaskResponse


private TaskResponse convertToResponse(Task task) {
TaskResponse response = new TaskResponse();
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
return response;
}
}

You might also like