package com.youlai.boot.mini.controller; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.Result; import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.mini.model.dto.*; import com.youlai.boot.mini.model.form.AdoptionDiaryForm; import com.youlai.boot.mini.model.query.OwnAdoptionDiaryQuery; import com.youlai.boot.mini.model.vo.AdoptionDiaryVO; import com.youlai.boot.mini.model.vo.SaveStrayAnimalVO; import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; import com.youlai.boot.mini.service.AdoptionDiaryService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; @Tag(name = "领养日记的相关接口") @RestController @RequestMapping("/api/v1/mini/adoptionDiary") @RequiredArgsConstructor public class AdoptionDiaryController { private final AdoptionDiaryService adoptionDiaryService; @Operation(summary = "添加领养日记时先保存文件", operationId = "DiarySaveFile") @PostMapping(value = "save/file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.INSERT) public Result saveFile( @RequestPart(name = "images", required = false) List images, @RequestPart(name = "videos", required = false) List videos ) { List urlList = adoptionDiaryService.saveFile(images, videos); return Result.success(urlList); } @Operation(summary = "添加领养日记信息") @PostMapping(value = "save") @RepeatSubmit @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.INSERT) public Result saveAdoptionDiary( @Valid @RequestBody AdoptionDiaryForm formData ) { SaveStrayAnimalVO vo = adoptionDiaryService.saveAdoptionDiary(formData); return Result.success(vo); } @Operation(summary = "编辑领养日记信息(不包含图片/视频媒体资源)") @PostMapping(value = "/update/{diaryUuid}") @RepeatSubmit @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.UPDATE) public Result updateAdoptionDiary( @PathVariable String diaryUuid, @Validated @RequestBody AdoptionDiaryForm formData ) { adoptionDiaryService.updateAdoptionDiary(diaryUuid, formData); return Result.success(); } @Operation(summary = "编辑领养日记时,删除领养日记媒体资源") @PostMapping(value = "/update/deleteMediaSource") @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.UPDATE) public Result deleteMediaSource( @RequestBody @Validated DeleteAdoptionDiaryMediaDTO deleteAdoptionDiaryMediaDTO ){ adoptionDiaryService.deleteMediaSource(deleteAdoptionDiaryMediaDTO); return Result.success(); } @Operation(summary = "编辑领养日记时,添加领养日记媒体资源", description = "比如补充图片、补充视频") @PostMapping(value = "/update/saveMediaSource/{diaryUuid}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @RepeatSubmit @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.UPDATE) public Result saveMediaSource( @PathVariable String diaryUuid, @RequestPart(name = "images", required = false) List images, @RequestPart(name = "videos", required = false) List videos ) { adoptionDiaryService.saveMediaSource(diaryUuid, images, videos); return Result.success(); } @Operation(summary = "编辑领养日记可见范围") @PostMapping(value = "/update/visibility/{diaryUuid}") @RepeatSubmit(expire = 1) @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.UPDATE) public Result updateVisibility( @PathVariable String diaryUuid, @RequestBody @Validated EditVisibilityDTO editVisibilityDTO ) { adoptionDiaryService.updateVisibility(diaryUuid, editVisibilityDTO); return Result.success(); } @Operation(summary = "删除领养日记") @PostMapping(value = "/delete") @RepeatSubmit @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.DELETE) public Result delete( @RequestBody @Validated DeleteAdoptionDiaryDTO deleteAdoptionDiaryDTO ) { adoptionDiaryService.delete(deleteAdoptionDiaryDTO); return Result.success(); } @Operation(summary = "获取自己创建的领养日记列表") @GetMapping(value = "/getSelfCreatedPage") public PageResult getSelfCreatedPage( OwnAdoptionDiaryQuery queryParams ) { return PageResult.success(adoptionDiaryService.getSelfCreatedPage(queryParams)); } @Operation(summary = "获取领养日记详情") @RequestMapping(value = "/getDetails/{animalUuid}", method = RequestMethod.GET) public Result getDetails( @PathVariable String animalUuid){ return Result.success(adoptionDiaryService.getDetails(animalUuid, SecurityUtils.getUserId())); } }