package com.yunhai.cms.controller.api; import com.yunhai.cms.model.dto.DeleteRequest; import com.yunhai.cms.model.vo.AttachmentVo; import com.yunhai.cms.service.impl.AttachmentService; import com.yunhai.platform.utils.model.BoaUser; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.util.Map; /** * 附件管理(方案 §9.2):编辑器图片/附件/轮播图/友链 Logo 复用同一上传接口。 */ @RestController @RequestMapping("/api/attachment") @RequiredArgsConstructor public class AttachmentController { private final AttachmentService attachmentService; /** 上传(multipart:file 必填;articleId 可空;scene 可空 banner/link/site,B2 初步标记) */ @PostMapping("/upload") public AttachmentVo upload(BoaUser authUserWithDept, @RequestParam("siteId") Integer siteId, @RequestParam(value = "articleId", required = false) Integer articleId, @RequestParam(value = "scene", required = false) String scene, @RequestParam("file") MultipartFile file) { return attachmentService.upload(authUserWithDept, siteId, articleId, scene, file); } /** 附件列表(orphanOnly=true 仅孤儿) */ @GetMapping("/page") public Map page(BoaUser authUserWithDept, @RequestParam("siteId") Integer siteId, @RequestParam(value = "orphanOnly", required = false, defaultValue = "false") boolean orphanOnly, @RequestParam(value = "page", required = false, defaultValue = "1") Integer page, @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) { return attachmentService.page(authUserWithDept, siteId, orphanOnly, page, pageSize); } /** 删除附件记录(物理文件运维定期清理) */ @PostMapping("/delete") public void delete(BoaUser authUserWithDept, @Valid @RequestBody DeleteRequest request) { attachmentService.delete(authUserWithDept, request); } }