feat(character): 添加用户人设接口及排序管理

新增 /character/addUserCharacter 端点,支持用户将人设加入个人列表并自动维护排序数组。引入 KeyboardUserCharacterAddDTO、KeyboardUserSortMapper 及相关错误码,实现事务级插入与排序更新。
This commit is contained in:
2025-12-04 16:17:29 +08:00
parent 4e6a5a6e18
commit fe19fb8ca2
10 changed files with 151 additions and 31 deletions

View File

@@ -2,39 +2,35 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yolo.keyborad.mapper.KeyboardUserCharacterMapper">
<resultMap id="KeyboardUserCharacterVOMap"
type="com.yolo.keyborad.model.vo.character.KeyboardUserCharacterVO">
<id column="id" property="id"/>
<!-- keyboard_character 表的列名,根据你的实际字段调整 -->
<result column="character_name" property="characterName"/>
<!-- 关键ARRAY 字段明确指定 jdbcType + typeHandler -->
<result column="sort"
jdbcType="ARRAY"
typeHandler="org.apache.ibatis.type.ArrayTypeHandler"/>
<result column="emoji" property="emoji"/>
</resultMap>
<update id="updateSortByIdAndUserId">
UPDATE keyboard_user_character
SET sort = #{sort,jdbcType=ARRAY}
where user_id = #{userId}
AND deleted = FALSE
</update>
<select id="selectByUserId"
resultMap="KeyboardUserCharacterVOMap">
resultType="com.yolo.keyborad.model.vo.character.KeyboardUserCharacterVO">
SELECT
kuc.id,
kuc.character_id,
kc.character_name,
kuc.sort,
kuc.emoji
FROM keyboard_user_character AS kuc
LEFT JOIN keyboard_character AS kc ON kuc.character_id = kc.id
FROM keyboard_user_character kuc
JOIN keyboard_user_sort kus
ON kus.user_id = kuc.user_id
LEFT JOIN keyboard_character kc
ON kuc.character_id = kc.id
WHERE kuc.user_id = #{loginId}
AND kuc.deleted = FALSE
ORDER BY array_position(kus.user_characteu_id_sort, kuc.id) NULLS LAST;
</select>
<update id="updateSortByIdAndUserId">
UPDATE keyboard_user_sort
SET user_characteu_id_sort = #{sort,jdbcType=ARRAY}
where user_id = #{userId}
</update>
<select id="selectSortByUserId" resultType="java.lang.Long">
SELECT unnest(user_characteu_id_sort)
FROM keyboard_user_sort
WHERE user_id = #{userId}
</select>
</mapper>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yolo.keyborad.mapper.KeyboardUserSortMapper">
<!-- 展开数组为多行:返回 List<Long> -->
<select id="selectSortByUserId" resultType="java.lang.Long">
SELECT unnest(user_characteu_id_sort)
FROM keyboard_user_sort
WHERE user_id = #{userId}
</select>
<update id="updateSortByUserId">
UPDATE keyboard_user_sort
SET user_characteu_id_sort = #{sort, jdbcType=ARRAY}
WHERE user_id = #{userId}
</update>
<insert id="insertUserSort">
INSERT INTO keyboard_user_sort (user_id, user_characteu_id_sort)
VALUES (#{userId}, #{sort, jdbcType=ARRAY})
</insert>
</mapper>