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.form.DiaryLikeForm; import com.youlai.boot.mini.model.form.NoteLikeForm; import com.youlai.boot.mini.model.query.OwnAdoptionDiaryQuery; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; import com.youlai.boot.mini.model.vo.AdoptionDiaryVO; import com.youlai.boot.mini.model.vo.AdoptionDiaryDetailsVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; 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.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; @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 ) { String diaryUuid = adoptionDiaryService.saveAdoptionDiary(formData); return Result.success(diaryUuid); } @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/{diaryUuid}", method = RequestMethod.GET) public Result getDetails( @PathVariable String diaryUuid){ return Result.success(adoptionDiaryService.getDetails(diaryUuid, SecurityUtils.getUserId())); } @Operation(summary = "获取某个用户创建的领养日记列表") @GetMapping(value = "/getOthersCreatedPage/{authorUuid}") public PageResult getOthersCreatedPage( @PathVariable String authorUuid, OwnAdoptionDiaryQuery queryParams ) { return PageResult.success(adoptionDiaryService.getOthersCreatedPage(authorUuid, queryParams)); } @Operation(summary = "领养日记点赞/取消点赞接口") @PostMapping(value = "/diary/like/toggle") @PreAuthorize("isAuthenticated()") @Log(module = LogModuleEnum.ADOPTION_DIARY_INFO, value = ActionTypeEnum.UPDATE) public Result> toggleDiaryLike( @Valid @RequestBody DiaryLikeForm form ) { Long userId = SecurityUtils.getUserId(); Map result = adoptionDiaryService.toggleDiaryLike(form, userId); return Result.success(result); } }