ScheduledPublishingTaskController.java 3.8 KB
// platform/controller/ScheduledPublishingTaskController.java
package com.aigeo.platform.controller;

import com.aigeo.platform.entity.ScheduledPublishingTask;
import com.aigeo.platform.entity.PublishingTaskStatus;
import com.aigeo.platform.service.ScheduledPublishingTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/scheduled-tasks")
public class ScheduledPublishingTaskController {
    
    @Autowired
    private ScheduledPublishingTaskService scheduledPublishingTaskService;
    
    @GetMapping
    public List<ScheduledPublishingTask> getAllTasks() {
        return scheduledPublishingTaskService.getAllTasks();
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<ScheduledPublishingTask> getTaskById(@PathVariable Integer id) {
        Optional<ScheduledPublishingTask> task = scheduledPublishingTaskService.getTaskById(id);
        return task.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    @GetMapping("/company/{companyId}")
    public List<ScheduledPublishingTask> getTasksByCompanyId(@PathVariable Integer companyId) {
        return scheduledPublishingTaskService.getTasksByCompanyId(companyId);
    }
    
    @GetMapping("/status/{status}")
    public List<ScheduledPublishingTask> getTasksByStatus(@PathVariable PublishingTaskStatus status) {
        return scheduledPublishingTaskService.getTasksByStatus(status);
    }
    
    @GetMapping("/company/{companyId}/status/{status}")
    public List<ScheduledPublishingTask> getTasksByCompanyIdAndStatus(
            @PathVariable Integer companyId, @PathVariable PublishingTaskStatus status) {
        return scheduledPublishingTaskService.getTasksByCompanyIdAndStatus(companyId, status);
    }
    
    @GetMapping("/pending")
    public List<ScheduledPublishingTask> getPendingTasksBeforeTime(@RequestParam Date beforeTime) {
        return scheduledPublishingTaskService.getPendingTasksBeforeTime(beforeTime);
    }
    
    @GetMapping("/platform-config/{platformConfigId}")
    public List<ScheduledPublishingTask> getTasksByPlatformConfigId(@PathVariable Integer platformConfigId) {
        return scheduledPublishingTaskService.getTasksByPlatformConfigId(platformConfigId);
    }
    
    @PostMapping
    public ScheduledPublishingTask createTask(@RequestBody ScheduledPublishingTask task) {
        return scheduledPublishingTaskService.saveTask(task);
    }
    
    @PutMapping("/{id}")
    public ResponseEntity<ScheduledPublishingTask> updateTask(@PathVariable Integer id, 
                                                            @RequestBody ScheduledPublishingTask taskDetails) {
        Optional<ScheduledPublishingTask> task = scheduledPublishingTaskService.getTaskById(id);
        if (task.isPresent()) {
            ScheduledPublishingTask updatedTask = task.get();
            updatedTask.setScheduleTime(taskDetails.getScheduleTime());
            updatedTask.setStatus(taskDetails.getStatus());
            updatedTask.setRetryCount(taskDetails.getRetryCount());
            updatedTask.setMaxRetries(taskDetails.getMaxRetries());
            updatedTask.setLastAttemptAt(taskDetails.getLastAttemptAt());
            updatedTask.setErrorMessage(taskDetails.getErrorMessage());
            
            ScheduledPublishingTask savedTask = scheduledPublishingTaskService.saveTask(updatedTask);
            return ResponseEntity.ok(savedTask);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteTask(@PathVariable Integer id) {
        scheduledPublishingTaskService.deleteTask(id);
        return ResponseEntity.noContent().build();
    }
}