diff --git a/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java b/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java index 892e811..35d4156 100644 --- a/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java +++ b/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java @@ -104,6 +104,7 @@ public class MyBatisPlusGenerator { ,new TableConfig("mini_stray_animal_note_like", IdType.AUTO, "mini") ,new TableConfig("mini_stray_animal_note_collect", IdType.AUTO, "mini") ,new TableConfig("mini_stray_animal_note_view", IdType.AUTO, "mini") + ,new TableConfig("mini_adoption_diary", IdType.AUTO, "mini") // ,new TableConfig("mini_stray_animal", IdType.AUTO, "mini") // ,new TableConfig("mini_stray_animal", IdType.INPUT, "minitest") diff --git a/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java b/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java index 675db57..194761c 100644 --- a/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java +++ b/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java @@ -33,7 +33,8 @@ public enum LogModuleEnum implements IBaseEnum { POINT_RECORD(101, "积分流水"), POINT_RULE(102, "积分规则"), SIGN_RECORD(103, "签到记录"), - STRAY_ANIMAL_NOTE_COMMENT(104, "流浪动物笔记评论"); + STRAY_ANIMAL_NOTE_COMMENT(104, "流浪动物笔记评论"), + ADOPTION_DIARY_INFO(105, "领养日记信息"); @EnumValue private final Integer value; diff --git a/src/main/java/com/youlai/boot/mini/controller/AdoptionDiaryController.java b/src/main/java/com/youlai/boot/mini/controller/AdoptionDiaryController.java new file mode 100644 index 0000000..dcfd179 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/controller/AdoptionDiaryController.java @@ -0,0 +1,132 @@ +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())); + } + + +} diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniAdoptionDiaryMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniAdoptionDiaryMapper.java new file mode 100644 index 0000000..f7b445c --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniAdoptionDiaryMapper.java @@ -0,0 +1,14 @@ +package com.youlai.boot.mini.mapper; + +import com.youlai.boot.mini.model.entity.MiniAdoptionDiary; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* 领养日记表 Mapper 接口 +* +* @author jwy +* @since +*/ +public interface MiniAdoptionDiaryMapper extends BaseMapper { + +} diff --git a/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryDTO.java b/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryDTO.java new file mode 100644 index 0000000..41a9b4c --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryDTO.java @@ -0,0 +1,7 @@ +package com.youlai.boot.mini.model.dto; + +import lombok.Data; + +@Data +public class DeleteAdoptionDiaryDTO { +} diff --git a/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryMediaDTO.java b/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryMediaDTO.java new file mode 100644 index 0000000..5895d6b --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/dto/DeleteAdoptionDiaryMediaDTO.java @@ -0,0 +1,7 @@ +package com.youlai.boot.mini.model.dto; + +import lombok.Data; + +@Data +public class DeleteAdoptionDiaryMediaDTO { +} diff --git a/src/main/java/com/youlai/boot/mini/model/entity/MiniAdoptionDiary.java b/src/main/java/com/youlai/boot/mini/model/entity/MiniAdoptionDiary.java new file mode 100644 index 0000000..c165154 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/entity/MiniAdoptionDiary.java @@ -0,0 +1,98 @@ +package com.youlai.boot.mini.model.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("mini_adoption_diary") +@Schema(description = "领养日记表") +public class MiniAdoptionDiary implements Serializable { + + @TableId(value = "id", type = IdType.AUTO) + @Schema(description = "笔记ID") + private Long id; + + + @TableField("uuid") + @Schema(description = "uuid唯一标识,前后端用这个进行数据交互") + private String uuid; + + @TableField("stray_animal_id") + @Schema(description = "关联的动物ID") + private Long strayAnimalId; + + @TableField("mini_user_id") + @Schema(description = "作者用户ID") + private Long miniUserId; + + @TableField("title") + @Schema(description = "笔记标题") + private String title; + + @TableField("content") + @Schema(description = "笔记正文内容") + private String content; + + @TableField("visibility") + @Schema(description = "可见范围:public-公开,private-仅自己可见,friends-仅好友") + private String visibility; + + @TableField("view_count") + @Schema(description = "浏览数") + private Integer viewCount; + + @TableField("like_count") + @Schema(description = "点赞数") + private Integer likeCount; + + @TableField("comment_count") + @Schema(description = "评论数") + private Integer commentCount; + + @TableField("collect_count") + @Schema(description = "收藏数") + private Integer collectCount; + + @TableField("create_time") + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @TableField("create_timestamp") + @Schema(description = "创建时间毫秒级时间戳") + private Long createTimestamp; + + @TableField("create_by") + @Schema(description = "创建人ID") + private Long createBy; + + @TableField("update_time") + @Schema(description = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @TableField("update_timestamp") + @Schema(description = "更新时间毫秒级时间戳") + private Long updateTimestamp; + + @TableField("update_by") + @Schema(description = "修改人ID") + private Long updateBy; + + @TableField("is_deleted") + @Schema(description = "逻辑删除标识(0-未删除 1-已删除)") + private Boolean deleted; + + +} diff --git a/src/main/java/com/youlai/boot/mini/model/form/AdoptionDiaryForm.java b/src/main/java/com/youlai/boot/mini/model/form/AdoptionDiaryForm.java new file mode 100644 index 0000000..3072c00 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/form/AdoptionDiaryForm.java @@ -0,0 +1,9 @@ +package com.youlai.boot.mini.model.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "评论点赞请求参数") +public class AdoptionDiaryForm { +} diff --git a/src/main/java/com/youlai/boot/mini/model/query/AdoptionDiaryQuery.java b/src/main/java/com/youlai/boot/mini/model/query/AdoptionDiaryQuery.java new file mode 100644 index 0000000..dc42c05 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/query/AdoptionDiaryQuery.java @@ -0,0 +1,18 @@ +package com.youlai.boot.mini.model.query; + +import com.youlai.boot.common.base.BaseQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class AdoptionDiaryQuery extends BaseQuery { + + @Schema(description = "起始登记时间,毫秒级时间戳", example = "1776426078459") + private Long createStartTimestamp; + + @Schema(description = "截止登记时间,毫秒级时间戳", example = "1776426078459") + private Long createEndTimestamp; + +} diff --git a/src/main/java/com/youlai/boot/mini/model/query/OwnAdoptionDiaryQuery.java b/src/main/java/com/youlai/boot/mini/model/query/OwnAdoptionDiaryQuery.java new file mode 100644 index 0000000..2df1056 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/query/OwnAdoptionDiaryQuery.java @@ -0,0 +1,17 @@ +package com.youlai.boot.mini.model.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class OwnAdoptionDiaryQuery extends AdoptionDiaryQuery{ + + @Schema(description = "登录用户ID", example = "1", hidden = true) + private Long miniUserId; + + @Schema(description = "创建领养日记的用户ID", example = "1", hidden = true) + private Long creatorId; + +} diff --git a/src/main/java/com/youlai/boot/mini/model/vo/AdoptionDiaryVO.java b/src/main/java/com/youlai/boot/mini/model/vo/AdoptionDiaryVO.java new file mode 100644 index 0000000..0c29bed --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/vo/AdoptionDiaryVO.java @@ -0,0 +1,7 @@ +package com.youlai.boot.mini.model.vo; + +import lombok.Data; + +@Data +public class AdoptionDiaryVO { +} diff --git a/src/main/java/com/youlai/boot/mini/service/AdoptionDiaryService.java b/src/main/java/com/youlai/boot/mini/service/AdoptionDiaryService.java new file mode 100644 index 0000000..9392b2c --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/service/AdoptionDiaryService.java @@ -0,0 +1,38 @@ +package com.youlai.boot.mini.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.youlai.boot.mini.model.dto.DeleteAdoptionDiaryDTO; +import com.youlai.boot.mini.model.dto.DeleteAdoptionDiaryMediaDTO; +import com.youlai.boot.mini.model.dto.EditVisibilityDTO; +import com.youlai.boot.mini.model.entity.MiniAdoptionDiary; +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 jakarta.validation.Valid; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface AdoptionDiaryService extends IService { + + List saveFile(List images, List videos); + + SaveStrayAnimalVO saveAdoptionDiary(@Valid AdoptionDiaryForm formData); + + void updateAdoptionDiary(String diaryUuid, AdoptionDiaryForm formData); + + void deleteMediaSource(DeleteAdoptionDiaryMediaDTO deleteAdoptionDiaryMediaDTO); + + void saveMediaSource(String diaryUuid, List images, List videos); + + void updateVisibility(String diaryUuid, EditVisibilityDTO editVisibilityDTO); + + void delete(DeleteAdoptionDiaryDTO deleteAdoptionDiaryDTO); + + List getSelfCreatedPage(OwnAdoptionDiaryQuery queryParams); + + StrayAnimalDetailsVO getDetails(String animalUuid, Long userId); + +} diff --git a/src/main/java/com/youlai/boot/mini/service/impl/AdoptionDiaryServiceImpl.java b/src/main/java/com/youlai/boot/mini/service/impl/AdoptionDiaryServiceImpl.java new file mode 100644 index 0000000..7038d14 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/service/impl/AdoptionDiaryServiceImpl.java @@ -0,0 +1,64 @@ +package com.youlai.boot.mini.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.youlai.boot.mini.mapper.MiniAdoptionDiaryMapper; +import com.youlai.boot.mini.model.dto.DeleteAdoptionDiaryDTO; +import com.youlai.boot.mini.model.dto.DeleteAdoptionDiaryMediaDTO; +import com.youlai.boot.mini.model.dto.EditVisibilityDTO; +import com.youlai.boot.mini.model.entity.MiniAdoptionDiary; +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.service.AdoptionDiaryService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@Service +public class AdoptionDiaryServiceImpl extends ServiceImpl implements AdoptionDiaryService { + + + @Override + public List saveFile(List images, List videos) { + return List.of(); + } + + @Override + public SaveStrayAnimalVO saveAdoptionDiary(AdoptionDiaryForm formData) { + return null; + } + + @Override + public void updateAdoptionDiary(String diaryUuid, AdoptionDiaryForm formData) { + + } + + @Override + public void deleteMediaSource(DeleteAdoptionDiaryMediaDTO deleteAdoptionDiaryMediaDTO) { + + } + + @Override + public void saveMediaSource(String diaryUuid, List images, List videos) { + + } + + @Override + public void updateVisibility(String diaryUuid, EditVisibilityDTO editVisibilityDTO) { + + } + + @Override + public void delete(DeleteAdoptionDiaryDTO deleteAdoptionDiaryDTO) { + + } + + @Override + public List getSelfCreatedPage(OwnAdoptionDiaryQuery queryParams) { + return List.of(); + } + + +} diff --git a/src/main/resources/mapper/mini/MiniAdoptionDiaryMapper.xml b/src/main/resources/mapper/mini/MiniAdoptionDiaryMapper.xml new file mode 100644 index 0000000..8184451 --- /dev/null +++ b/src/main/resources/mapper/mini/MiniAdoptionDiaryMapper.xml @@ -0,0 +1,9 @@ + + + + + + +