package com.aurora.controller; import com.aurora.annotation.OptLog; import com.aurora.model.dto.PhotoAlbumAdminDTO; import com.aurora.model.dto.PhotoAlbumDTO; import com.aurora.enums.FilePathEnum; import com.aurora.model.vo.ResultVO; import com.aurora.service.PhotoAlbumService; import com.aurora.strategy.context.UploadStrategyContext; import com.aurora.model.vo.ConditionVO; import com.aurora.model.dto.PageResultDTO; import com.aurora.model.vo.PhotoAlbumVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.util.List; import static com.aurora.constant.OptTypeConstant.*; @Api(tags = "相册模块") @RestController public class PhotoAlbumController { @Autowired private UploadStrategyContext uploadStrategyContext;//用于文件上传 @Autowired private PhotoAlbumService photoAlbumService;//相册业务逻辑 @OptLog(optType = UPLOAD) @ApiOperation(value = "上传相册封面") @ApiImplicitParam(name = "file", value = "相册封面", required = true, dataType = "MultipartFile") //Swagger注解,说明接口的参数信息:参数名file,含义是相册封面,必填,类型为MultipartFile(Spring的文件上传类型) @PostMapping("/admin/photos/albums/upload") //返回值ResultVO:返回上传后封面图片的存储路径(字符串格式) public ResultVO savePhotoAlbumCover(MultipartFile file) { //MultipartFile file:接收前端上传的相册封面文件 return ResultVO.ok(uploadStrategyContext.executeUploadStrategy(file, FilePathEnum.PHOTO.getPath())); } @OptLog(optType = SAVE_OR_UPDATE) @ApiOperation(value = "保存或更新相册") @PostMapping("/admin/photos/albums") public ResultVO saveOrUpdatePhotoAlbum(@Valid @RequestBody PhotoAlbumVO photoAlbumVO) { //PhotoAlbumVO photoAlbumVO:封装相册保存、更新的参数,包含相册名称、封面路径、描述等信息,且被@Valid校验 photoAlbumService.saveOrUpdatePhotoAlbum(photoAlbumVO); return ResultVO.ok(); } @ApiOperation(value = "查看后台相册列表")//分页 @GetMapping("/admin/photos/albums") public ResultVO> listPhotoAlbumBacks(ConditionVO conditionVO) { //ConditionVO conditionVO:封装相册的查询条件(比如相册名称关键词、创建时间范围等) return ResultVO.ok(photoAlbumService.listPhotoAlbumsAdmin(conditionVO)); } @ApiOperation(value = "获取后台相册列表信息")//获取后台所有相册的基础信息列表(相比于分页列表,更偏向简洁的信息集合) @GetMapping("/admin/photos/albums/info") public ResultVO> listPhotoAlbumBackInfos() { return ResultVO.ok(photoAlbumService.listPhotoAlbumInfosAdmin()); } @ApiOperation(value = "根据id获取后台相册信息") @ApiImplicitParam(name = "albumId", value = "相册id", required = true, dataType = "Integer") @GetMapping("/admin/photos/albums/{albumId}/info") //返回值ResultVO:返回指定ID的相册详细信息 //PhotoAlbumAdminDTO是后台相册详细数据传输对象 public ResultVO getPhotoAlbumBackById(@PathVariable("albumId") Integer albumId) { return ResultVO.ok(photoAlbumService.getPhotoAlbumByIdAdmin(albumId)); } @OptLog(optType = DELETE) @ApiOperation(value = "根据id删除相册") @ApiImplicitParam(name = "albumId", value = "相册id", required = true, dataType = "Integer") @DeleteMapping("/admin/photos/albums/{albumId}") public ResultVO deletePhotoAlbumById(@PathVariable("albumId") Integer albumId) { photoAlbumService.deletePhotoAlbumById(albumId); return ResultVO.ok(); } @ApiOperation(value = "获取相册列表")//获取前端展示用的相册列表,普通用户也可调用 @GetMapping("/photos/albums") public ResultVO> listPhotoAlbums() { return ResultVO.ok(photoAlbumService.listPhotoAlbums()); } }