LandingPageProjectController.java 5.7 KB
package com.aigeo.landingpage.controller;

import com.aigeo.landingpage.entity.LandingPageProject;
import com.aigeo.landingpage.service.LandingPageProjectService;
import com.aigeo.common.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 落地页项目控制器
 */
@Slf4j
@RestController
@RequestMapping("/api/landing-page-projects")
@Tag(name = "落地页项目管理", description = "落地页项目相关接口")
public class LandingPageProjectController {
    
    @Autowired
    private LandingPageProjectService landingPageProjectService;
    
    @PostMapping
    @Operation(summary = "创建落地页项目", description = "创建新的落地页项目")
    public Result<LandingPageProject> createProject(@RequestBody LandingPageProject project) {
        try {
            LandingPageProject savedProject = landingPageProjectService.save(project);
            return Result.success("项目创建成功", savedProject);
        } catch (Exception e) {
            log.error("创建落地页项目失败", e);
            return Result.error("项目创建失败");
        }
    }
    
    @GetMapping("/{id}")
    @Operation(summary = "获取落地页项目详情", description = "根据ID获取落地页项目详情")
    public Result<LandingPageProject> getProjectById(@PathVariable Integer id) {
        try {
            return landingPageProjectService.findById(id)
                    .map(project -> Result.success("查询成功", project))
                    .orElse(Result.error("项目不存在"));
        } catch (Exception e) {
            log.error("获取落地页项目详情失败, id: {}", id, e);
            return Result.error("查询失败");
        }
    }
    
    @GetMapping
    @Operation(summary = "获取落地页项目列表", description = "获取所有落地页项目列表")
    public Result<List<LandingPageProject>> getAllProjects() {
        try {
            List<LandingPageProject> projects = landingPageProjectService.findAll();
            return Result.success("查询成功", projects);
        } catch (Exception e) {
            log.error("获取落地页项目列表失败", e);
            return Result.error("查询失败");
        }
    }
    
    @GetMapping("/company/{companyId}")
    @Operation(summary = "根据公司ID获取落地页项目列表", description = "根据公司ID获取落地页项目列表")
    public Result<List<LandingPageProject>> getProjectsByCompanyId(@PathVariable Integer companyId) {
        try {
            List<LandingPageProject> projects = landingPageProjectService.findByCompanyId(companyId);
            return Result.success("查询成功", projects);
        } catch (Exception e) {
            log.error("根据公司ID获取落地页项目列表失败, companyId: {}", companyId, e);
            return Result.error("查询失败");
        }
    }
    
    @GetMapping("/user/{userId}")
    @Operation(summary = "根据用户ID获取落地页项目列表", description = "根据用户ID获取落地页项目列表")
    public Result<List<LandingPageProject>> getProjectsByUserId(@PathVariable Integer userId) {
        try {
            List<LandingPageProject> projects = landingPageProjectService.findByUserId(userId);
            return Result.success("查询成功", projects);
        } catch (Exception e) {
            log.error("根据用户ID获取落地页项目列表失败, userId: {}", userId, e);
            return Result.error("查询失败");
        }
    }
    
    @GetMapping("/status/{status}")
    @Operation(summary = "根据状态获取落地页项目列表", description = "根据状态获取落地页项目列表")
    public Result<List<LandingPageProject>> getProjectsByStatus(@PathVariable String status) {
        try {
            LandingPageProject.ProjectStatus projectStatus = LandingPageProject.ProjectStatus.fromCode(status);
            List<LandingPageProject> projects = landingPageProjectService.findByStatus(projectStatus);
            return Result.success("查询成功", projects);
        } catch (Exception e) {
            log.error("根据状态获取落地页项目列表失败, status: {}", status, e);
            return Result.error("查询失败");
        }
    }
    
    @PutMapping("/{id}")
    @Operation(summary = "更新落地页项目", description = "更新落地页项目信息")
    public Result<LandingPageProject> updateProject(@PathVariable Integer id, @RequestBody LandingPageProject project) {
        try {
            if (!landingPageProjectService.findById(id).isPresent()) {
                return Result.error("项目不存在");
            }
            project.setId(id);
            LandingPageProject updatedProject = landingPageProjectService.save(project);
            return Result.success("项目更新成功", updatedProject);
        } catch (Exception e) {
            log.error("更新落地页项目失败, id: {}", id, e);
            return Result.error("项目更新失败");
        }
    }
    
    @DeleteMapping("/{id}")
    @Operation(summary = "删除落地页项目", description = "删除指定ID的落地页项目")
    public Result<String> deleteProject(@PathVariable Integer id) {
        try {
            if (!landingPageProjectService.findById(id).isPresent()) {
                return Result.error("项目不存在");
            }
            landingPageProjectService.deleteById(id);
            return Result.success("项目删除成功");
        } catch (Exception e) {
            log.error("删除落地页项目失败, id: {}", id, e);
            return Result.error("项目删除失败");
        }
    }
}