diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/KeyboardAiCompanionController.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/KeyboardAiCompanionController.java index 2807eeb..4f753e7 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/KeyboardAiCompanionController.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/KeyboardAiCompanionController.java @@ -1,5 +1,6 @@ package com.yolo.keyboard.controller.admin.aicompanion; +import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -101,4 +102,56 @@ public class KeyboardAiCompanionController { BeanUtils.toBean(list, KeyboardAiCompanionRespVO.class)); } + // ==================== 子表(AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍) ==================== + + @GetMapping("/ai-companion-i18n/page") + @Operation(summary = "获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍分页") + @Parameter(name = "id", description = "主键ID") + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:query')") + public CommonResult> getAiCompanionI18nPage(PageParam pageReqVO, + @RequestParam("id") Long id) { + return success(aiCompanionService.getAiCompanionI18nPage(pageReqVO, id)); + } + + @PostMapping("/ai-companion-i18n/create") + @Operation(summary = "创建AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍") + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:create')") + public CommonResult createAiCompanionI18n(@Valid @RequestBody AiCompanionI18nDO aiCompanionI18n) { + return success(aiCompanionService.createAiCompanionI18n(aiCompanionI18n)); + } + + @PutMapping("/ai-companion-i18n/update") + @Operation(summary = "更新AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍") + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:update')") + public CommonResult updateAiCompanionI18n(@Valid @RequestBody AiCompanionI18nDO aiCompanionI18n) { + aiCompanionService.updateAiCompanionI18n(aiCompanionI18n); + return success(true); + } + + @DeleteMapping("/ai-companion-i18n/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍") + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:delete')") + public CommonResult deleteAiCompanionI18n(@RequestParam("id") Long id) { + aiCompanionService.deleteAiCompanionI18n(id); + return success(true); + } + + @DeleteMapping("/ai-companion-i18n/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍") + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:delete')") + public CommonResult deleteAiCompanionI18nList(@RequestParam("ids") List ids) { + aiCompanionService.deleteAiCompanionI18nListByIds(ids); + return success(true); + } + + @GetMapping("/ai-companion-i18n/get") + @Operation(summary = "获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('keyboard:ai-companion:query')") + public CommonResult getAiCompanionI18n(@RequestParam("id") Long id) { + return success(aiCompanionService.getAiCompanionI18n(id)); + } + } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java index 00d3cca..7b503fa 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java @@ -13,9 +13,6 @@ import static com.yolo.keyboard.framework.common.util.date.DateUtils.FORMAT_YEAR @Data public class KeyboardAiCompanionPageReqVO extends PageParam { - @Schema(description = "角色名称(展示用,如:Katie Leona)", example = "张三") - private String name; - @Schema(description = "角色头像URL,用于列表页和聊天页", example = "https://www.iocoder.cn") private String avatarUrl; @@ -28,14 +25,8 @@ public class KeyboardAiCompanionPageReqVO extends PageParam { @Schema(description = "角色年龄段描述(如:20s、25-30)") private String ageRange; - @Schema(description = "一句话人设描述,用于卡片或列表展示") - private String shortDesc; - - @Schema(description = "角色详细介绍文案,用于角色详情页") - private String introText; - @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") - private List personalityTags; + private Object personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") private String speakingStyle; @@ -67,7 +58,7 @@ public class KeyboardAiCompanionPageReqVO extends PageParam { @Schema(description = "开场白音频") private String prologueAudio; - @Schema(description = "音频Id", example = "31328") + @Schema(description = "音频Id", example = "4155") private String voiceId; } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java index 8b504aa..7d26209 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java @@ -12,14 +12,10 @@ import cn.idev.excel.annotation.*; @ExcelIgnoreUnannotated public class KeyboardAiCompanionRespVO { - @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7816") + @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28180") @ExcelProperty("陪聊角色唯一ID") private Long id; - @Schema(description = "角色名称(展示用,如:Katie Leona)", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @ExcelProperty("角色名称(展示用,如:Katie Leona)") - private String name; - @Schema(description = "角色头像URL,用于列表页和聊天页", example = "https://www.iocoder.cn") @ExcelProperty("角色头像URL,用于列表页和聊天页") private String avatarUrl; @@ -36,17 +32,9 @@ public class KeyboardAiCompanionRespVO { @ExcelProperty("角色年龄段描述(如:20s、25-30)") private String ageRange; - @Schema(description = "一句话人设描述,用于卡片或列表展示") - @ExcelProperty("一句话人设描述,用于卡片或列表展示") - private String shortDesc; - - @Schema(description = "角色详细介绍文案,用于角色详情页") - @ExcelProperty("角色详细介绍文案,用于角色详情页") - private String introText; - @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") @ExcelProperty("角色性格标签数组(如:温柔、黏人、治愈)") - private List personalityTags; + private Object personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") @ExcelProperty("角色说话风格(如:撒娇型、理性型、活泼型)") @@ -88,7 +76,7 @@ public class KeyboardAiCompanionRespVO { @ExcelProperty("开场白音频") private String prologueAudio; - @Schema(description = "音频Id", example = "31328") + @Schema(description = "音频Id", example = "4155") @ExcelProperty("音频Id") private String voiceId; diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java index f80dfe6..569b555 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java @@ -11,13 +11,9 @@ import java.time.LocalDateTime; @Data public class KeyboardAiCompanionSaveReqVO { - @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7816") + @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28180") private Long id; - @Schema(description = "角色名称(展示用,如:Katie Leona)", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @NotEmpty(message = "角色名称(展示用,如:Katie Leona)不能为空") - private String name; - @Schema(description = "角色头像URL,用于列表页和聊天页", example = "https://www.iocoder.cn") private String avatarUrl; @@ -30,14 +26,8 @@ public class KeyboardAiCompanionSaveReqVO { @Schema(description = "角色年龄段描述(如:20s、25-30)") private String ageRange; - @Schema(description = "一句话人设描述,用于卡片或列表展示") - private String shortDesc; - - @Schema(description = "角色详细介绍文案,用于角色详情页") - private String introText; - @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") - private List personalityTags; + private Object personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") private String speakingStyle; @@ -60,13 +50,21 @@ public class KeyboardAiCompanionSaveReqVO { @Schema(description = "角色热度评分,用于推荐排序") private Integer popularityScore; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "创建时间不能为空") + private LocalDateTime createdAt; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "更新时间不能为空") + private LocalDateTime updatedAt; + @Schema(description = "开场白") private String prologue; @Schema(description = "开场白音频") private String prologueAudio; - @Schema(description = "音频Id", example = "31328") + @Schema(description = "音频Id", example = "4155") private String voiceId; } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/AiCompanionI18nDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/AiCompanionI18nDO.java new file mode 100644 index 0000000..732e195 --- /dev/null +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/AiCompanionI18nDO.java @@ -0,0 +1,60 @@ +package com.yolo.keyboard.dal.dataobject.aicompanion; + +import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO; + +/** + * AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 DO + * + * @author ziin + */ +@TableName("keyboard_ai_companion_i18n") +@KeySequence("keyboard_ai_companion_i18n_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TenantIgnore +public class AiCompanionI18nDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 陪聊角色主表ID,对应 keyboard_ai_companion.id + */ + private Long companionId; + /** + * 语言标识,如 zh-CN、en-US、ja-JP + */ + private String locale; + /** + * 角色名称(多语言) + */ + private String name; + /** + * 一句话人设描述(多语言) + */ + private String shortDesc; + /** + * 角色详细介绍文案(多语言) + */ + private String introText; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java index 56e2eed..83b42cc 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java @@ -29,10 +29,7 @@ public class KeyboardAiCompanionDO { */ @TableId private Long id; - /** - * 角色名称(展示用,如:Katie Leona) - */ - private String name; + /** * 角色头像URL,用于列表页和聊天页 */ @@ -49,14 +46,6 @@ public class KeyboardAiCompanionDO { * 角色年龄段描述(如:20s、25-30) */ private String ageRange; - /** - * 一句话人设描述,用于卡片或列表展示 - */ - private String shortDesc; - /** - * 角色详细介绍文案,用于角色详情页 - */ - private String introText; /** * 角色性格标签数组(如:温柔、黏人、治愈) */ diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/character/CharacterI18nDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/character/CharacterI18nDO.java index be18ea1..3f326a1 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/character/CharacterI18nDO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/character/CharacterI18nDO.java @@ -14,7 +14,7 @@ import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO; * @author ziin */ @TableName("keyboard_character_i18n") -@KeySequence("keyboard_character_i18n_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@KeySequence("keyboard_character_i18n_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @ToString(callSuper = true) @Builder diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/AiCompanionI18nMapper.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/AiCompanionI18nMapper.java new file mode 100644 index 0000000..1be0cc8 --- /dev/null +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/AiCompanionI18nMapper.java @@ -0,0 +1,34 @@ +package com.yolo.keyboard.dal.mysql.aicompanion; + +import java.util.*; + +import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO; +import com.yolo.keyboard.framework.common.pojo.PageResult; +import com.yolo.keyboard.framework.common.pojo.PageParam; +import com.yolo.keyboard.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yolo.keyboard.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +/** + * AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 Mapper + * + * @author ziin + */ +@Mapper +public interface AiCompanionI18nMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long id) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(AiCompanionI18nDO::getCompanionId, id) + .orderByDesc(AiCompanionI18nDO::getId)); + } + + default int deleteById(Long id) { + return delete(AiCompanionI18nDO::getId, id); + } + + default int deleteByIds(List ids) { + return deleteBatch(AiCompanionI18nDO::getId, ids); + } + +} \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/KeyboardAiCompanionMapper.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/KeyboardAiCompanionMapper.java index 4774426..fed3f10 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/KeyboardAiCompanionMapper.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/aicompanion/KeyboardAiCompanionMapper.java @@ -19,13 +19,10 @@ public interface KeyboardAiCompanionMapper extends BaseMapperX selectPage(KeyboardAiCompanionPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(KeyboardAiCompanionDO::getName, reqVO.getName()) .eqIfPresent(KeyboardAiCompanionDO::getAvatarUrl, reqVO.getAvatarUrl()) .eqIfPresent(KeyboardAiCompanionDO::getCoverImageUrl, reqVO.getCoverImageUrl()) .eqIfPresent(KeyboardAiCompanionDO::getGender, reqVO.getGender()) .eqIfPresent(KeyboardAiCompanionDO::getAgeRange, reqVO.getAgeRange()) - .eqIfPresent(KeyboardAiCompanionDO::getShortDesc, reqVO.getShortDesc()) - .eqIfPresent(KeyboardAiCompanionDO::getIntroText, reqVO.getIntroText()) .eqIfPresent(KeyboardAiCompanionDO::getPersonalityTags, reqVO.getPersonalityTags()) .eqIfPresent(KeyboardAiCompanionDO::getSpeakingStyle, reqVO.getSpeakingStyle()) .eqIfPresent(KeyboardAiCompanionDO::getSystemPrompt, reqVO.getSystemPrompt()) diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionService.java b/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionService.java index cd499bc..26e6024 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionService.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionService.java @@ -2,7 +2,9 @@ package com.yolo.keyboard.service.aicompanion; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO; +import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO; import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO; +import com.yolo.keyboard.framework.common.pojo.PageParam; import com.yolo.keyboard.framework.common.pojo.PageResult; import jakarta.validation.Valid; @@ -59,5 +61,51 @@ public interface KeyboardAiCompanionService { * @return AI陪聊角色表,用于定义恋爱/陪伴型虚拟角色的基础信息与人设分页 */ PageResult getAiCompanionPage(KeyboardAiCompanionPageReqVO pageReqVO); + // ==================== 子表(AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍) ==================== + /** + * 获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍分页 + * + * @param pageReqVO 分页查询 + * @param id 主键ID + * @return AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍分页 + */ + PageResult getAiCompanionI18nPage(PageParam pageReqVO, Long id); + + /** + * 创建AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + * + * @param aiCompanionI18n 创建信息 + * @return 编号 + */ + Long createAiCompanionI18n(@Valid AiCompanionI18nDO aiCompanionI18n); + + /** + * 更新AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + * + * @param aiCompanionI18n 更新信息 + */ + void updateAiCompanionI18n(@Valid AiCompanionI18nDO aiCompanionI18n); + + /** + * 删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + * + * @param id 编号 + */ + void deleteAiCompanionI18n(Long id); + + /** + * 批量删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + * + * @param ids 编号 + */ + void deleteAiCompanionI18nListByIds(List ids); + + /** + * 获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + * + * @param id 编号 + * @return AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 + */ + AiCompanionI18nDO getAiCompanionI18n(Long id); } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionServiceImpl.java b/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionServiceImpl.java index 0e2d422..3446771 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionServiceImpl.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/service/aicompanion/KeyboardAiCompanionServiceImpl.java @@ -2,17 +2,22 @@ package com.yolo.keyboard.service.aicompanion; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO; +import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO; import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO; +import com.yolo.keyboard.dal.mysql.aicompanion.AiCompanionI18nMapper; import com.yolo.keyboard.dal.mysql.aicompanion.KeyboardAiCompanionMapper; +import com.yolo.keyboard.framework.common.pojo.PageParam; import com.yolo.keyboard.framework.common.pojo.PageResult; import com.yolo.keyboard.framework.common.util.object.BeanUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.List; import static com.yolo.keyboard.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.AI_COMPANION_I18N_NOT_EXISTS; import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.AI_COMPANION_NOT_EXISTS; /** @@ -26,6 +31,8 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic @Resource private KeyboardAiCompanionMapper aiCompanionMapper; + @Resource + private AiCompanionI18nMapper aiCompanionI18nMapper; @Override public Long createAiCompanion(KeyboardAiCompanionSaveReqVO createReqVO) { @@ -47,18 +54,26 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic } @Override + @Transactional(rollbackFor = Exception.class) public void deleteAiCompanion(Long id) { // 校验存在 validateAiCompanionExists(id); // 删除 aiCompanionMapper.deleteById(id); + + // 删除子表 + deleteAiCompanionI18nById(id); } @Override - public void deleteAiCompanionListByIds(List ids) { + @Transactional(rollbackFor = Exception.class) + public void deleteAiCompanionListByIds(List ids) { // 删除 aiCompanionMapper.deleteByIds(ids); - } + + // 删除子表 + deleteAiCompanionI18nByIds(ids); + } private void validateAiCompanionExists(Long id) { @@ -77,4 +92,56 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic return aiCompanionMapper.selectPage(pageReqVO); } + // ==================== 子表(AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍) ==================== + + @Override + public PageResult getAiCompanionI18nPage(PageParam pageReqVO, Long id) { + return aiCompanionI18nMapper.selectPage(pageReqVO, id); + } + + @Override + public Long createAiCompanionI18n(AiCompanionI18nDO aiCompanionI18n) { + aiCompanionI18nMapper.insert(aiCompanionI18n); + return aiCompanionI18n.getId(); + } + + @Override + public void updateAiCompanionI18n(AiCompanionI18nDO aiCompanionI18n) { + // 校验存在 + validateAiCompanionI18nExists(aiCompanionI18n.getId()); + // 更新 + aiCompanionI18nMapper.updateById(aiCompanionI18n); + } + + @Override + public void deleteAiCompanionI18n(Long id) { + // 删除 + aiCompanionI18nMapper.deleteById(id); + } + + @Override + public void deleteAiCompanionI18nListByIds(List ids) { + // 删除 + aiCompanionI18nMapper.deleteByIds(ids); + } + + @Override + public AiCompanionI18nDO getAiCompanionI18n(Long id) { + return aiCompanionI18nMapper.selectById(id); + } + + private void validateAiCompanionI18nExists(Long id) { + if (aiCompanionI18nMapper.selectById(id) == null) { + throw exception(AI_COMPANION_I18N_NOT_EXISTS); + } + } + + private void deleteAiCompanionI18nById(Long id) { + aiCompanionI18nMapper.deleteById(id); + } + + private void deleteAiCompanionI18nByIds(List ids) { + aiCompanionI18nMapper.deleteByIds(ids); + } + } \ No newline at end of file diff --git a/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java b/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java index 67ea8ae..45621a8 100644 --- a/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java +++ b/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java @@ -98,4 +98,5 @@ public interface ErrorCodeConstants { ErrorCode WARNING_MESSAGE_NOT_EXISTS = new ErrorCode(1_001_202_024, "用户注销提示信息不存在"); ErrorCode APP_VERSIONS_NOT_EXISTS = new ErrorCode(1_001_202_025, "App 版本发布与更新检查表信息不存在"); ErrorCode CHARACTER_I18N_NOT_EXISTS = new ErrorCode(1_001_202_026, "键盘人设国际化内容不存在"); + ErrorCode AI_COMPANION_I18N_NOT_EXISTS = new ErrorCode(1_001_202_027, "键盘人设国际化内容不存在"); }