WebsiteGenerationTaskController.java 3.3 KB
// website/controller/WebsiteGenerationTaskController.java
package com.aigeo.website.controller;

import com.aigeo.website.entity.WebsiteGenerationTask;
import com.aigeo.common.enums.TaskStatus;
import com.aigeo.website.service.WebsiteGenerationTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequestMapping("/api/website-generation-tasks")
public class WebsiteGenerationTaskController {
    
    @Autowired
    private WebsiteGenerationTaskService websiteGenerationTaskService;
    
    @GetMapping("/project/{projectId}")
    public List<WebsiteGenerationTask> getTasksByProjectId(@PathVariable Integer projectId) {
        return websiteGenerationTaskService.getTasksByProjectId(projectId);
    }
    
    @GetMapping("/user/{userId}")
    public List<WebsiteGenerationTask> getTasksByUserId(@PathVariable Integer userId) {
        return websiteGenerationTaskService.getTasksByUserId(userId);
    }
    
    @GetMapping("/parent/{parentTaskId}")
    public List<WebsiteGenerationTask> getTasksByParentTaskId(@PathVariable Integer parentTaskId) {
        return websiteGenerationTaskService.getTasksByParentTaskId(parentTaskId);
    }
    
    @GetMapping("/status/{status}")
    public List<WebsiteGenerationTask> getTasksByStatus(@PathVariable TaskStatus status) {
        return websiteGenerationTaskService.getTasksByStatus(status);
    }
    
    @GetMapping("/project/{projectId}/status/{status}")
    public List<WebsiteGenerationTask> getTasksByProjectIdAndStatus(
            @PathVariable Integer projectId, @PathVariable TaskStatus status) {
        return websiteGenerationTaskService.getTasksByProjectIdAndStatus(projectId, status);
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<WebsiteGenerationTask> getTaskById(@PathVariable Integer id) {
        Optional<WebsiteGenerationTask> task = websiteGenerationTaskService.getTaskById(id);
        return task.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    @PostMapping
    public WebsiteGenerationTask createTask(@RequestBody WebsiteGenerationTask task) {
        return websiteGenerationTaskService.saveTask(task);
    }
    
    @PutMapping("/{id}")
    public ResponseEntity<WebsiteGenerationTask> updateTask(@PathVariable Integer id, 
                                                         @RequestBody WebsiteGenerationTask taskDetails) {
        Optional<WebsiteGenerationTask> task = websiteGenerationTaskService.getTaskById(id);
        if (task.isPresent()) {
            WebsiteGenerationTask updatedTask = task.get();
            updatedTask.setStatus(taskDetails.getStatus());
            updatedTask.setErrorMessage(taskDetails.getErrorMessage());
            updatedTask.setCompletedAt(taskDetails.getCompletedAt());
            
            WebsiteGenerationTask savedTask = websiteGenerationTaskService.saveTask(updatedTask);
            return ResponseEntity.ok(savedTask);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteTask(@PathVariable Integer id) {
        websiteGenerationTaskService.deleteTask(id);
        return ResponseEntity.noContent().build();
    }
}