src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/controller/SecretKeyController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/mapper/SecretKeyMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/model/entity/SecretKey.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/service/SecretKeyService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.weiwojc.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MybatisPlusMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now()); } } src/main/java/com/weiwojc/controller/SecretKeyController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.weiwojc.controller; import com.weiwojc.model.common.Result; import com.weiwojc.model.entity.SecretKey; import com.weiwojc.service.SecretKeyService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/secret-key") @RequiredArgsConstructor public class SecretKeyController { private final SecretKeyService secretKeyService; /** * è·åå½åå¯é¥ */ @GetMapping public Result<SecretKey> getCurrentSecretKey() { SecretKey secretKey = secretKeyService.getCurrentSecretKey(); return Result.success(secretKey); } /** * æ´æ°å¯é¥ */ @GetMapping("/update/{key}") public Result<SecretKey> updateSecretKey(@PathVariable String key) { try { SecretKey secretKey = secretKeyService.updateSecretKey(key); return Result.success("å¯é¥æ´æ°æå", secretKey); } catch (RuntimeException e) { return Result.badRequest(e.getMessage()); } } } src/main/java/com/weiwojc/mapper/SecretKeyMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.weiwojc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.weiwojc.model.entity.SecretKey; import org.apache.ibatis.annotations.Mapper; @Mapper public interface SecretKeyMapper extends BaseMapper<SecretKey> { // ç»§æ¿ BaseMapper å·²ç»æä¾äºåºç¡ç CRUD æä½ // 对äºåæ¡è®°å½çåºæ¯ï¼è¿äºåºç¡æä½å·²ç»è¶³å¤ } src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.weiwojc.model.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; import lombok.Data; @Data public class SecretKeyUpdateDTO { @NotBlank(message = "åå¯é¥ä¸è½ä¸ºç©º") @Size(max = 255, message = "åå¯é¥é¿åº¦ä¸è½è¶ è¿255个å符") private String oldKey; @NotBlank(message = "æ°å¯é¥ä¸è½ä¸ºç©º") @Size(max = 255, message = "æ°å¯é¥é¿åº¦ä¸è½è¶ è¿255个å符") private String newKey; } src/main/java/com/weiwojc/model/entity/SecretKey.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.weiwojc.model.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("secret_key") public class SecretKey { @TableId(value = "`key`", type = IdType.INPUT) private String key; @TableField(fill = FieldFill.INSERT) private LocalDateTime createdAt; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedAt; @TableLogic private Boolean isDeleted; } src/main/java/com/weiwojc/service/SecretKeyService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.weiwojc.service; import com.weiwojc.model.entity.SecretKey; public interface SecretKeyService { /** * è·åå½åå¯é¥ï¼è¡¨ä¸å¯ä¸ç䏿¡è®°å½ï¼ */ SecretKey getCurrentSecretKey(); /** * æ´æ°å¯é¥ */ SecretKey updateSecretKey(String newKey); /** * åå§åå¯é¥ï¼å¦æä¸åå¨åå建é»è®¤å¯é¥ï¼ */ SecretKey initializeSecretKey(); } src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package com.weiwojc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.weiwojc.mapper.SecretKeyMapper; import com.weiwojc.model.entity.SecretKey; import com.weiwojc.service.SecretKeyService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.UUID; @Service @RequiredArgsConstructor public class SecretKeyServiceImpl implements SecretKeyService { private final SecretKeyMapper secretKeyMapper; @Override public SecretKey getCurrentSecretKey() { LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SecretKey::getIsDeleted, false) .last("LIMIT 1"); SecretKey secretKey = secretKeyMapper.selectOne(queryWrapper); // å¦ææ²¡ææ¾å°å¯é¥ï¼èªå¨åå§åä¸ä¸ª if (secretKey == null) { return initializeSecretKey(); } return secretKey; } @Override @Transactional public SecretKey updateSecretKey(String newKey) { if (newKey == null || newKey.trim().isEmpty()) { throw new RuntimeException("æ°å¯é¥ä¸è½ä¸ºç©º"); } SecretKey currentKey = getCurrentSecretKey(); // 妿æ°å¯é¥ä¸å½åå¯é¥ç¸åï¼ç´æ¥è¿å if (currentKey.getKey().equals(newKey.trim())) { return currentKey; } // å å é¤å½åå¯é¥ï¼é»è¾å é¤ï¼ currentKey.setIsDeleted(true); secretKeyMapper.updateById(currentKey); // å建æ°å¯é¥ SecretKey newSecretKey = new SecretKey(); newSecretKey.setKey(newKey.trim()); newSecretKey.setIsDeleted(false); secretKeyMapper.insert(newSecretKey); return newSecretKey; } @Override @Transactional public SecretKey initializeSecretKey() { // æ£æ¥æ¯å¦å·²åå¨å¯é¥ LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SecretKey::getIsDeleted, false); List<SecretKey> existingKeys = secretKeyMapper.selectList(queryWrapper); if (!existingKeys.isEmpty()) { return existingKeys.get(0); } // çæé»è®¤å¯é¥ String defaultKey = "default-secret-key-" + UUID.randomUUID().toString().substring(0, 8); SecretKey secretKey = new SecretKey(); secretKey.setKey(defaultKey); secretKey.setIsDeleted(false); secretKeyMapper.insert(secretKey); return secretKey; } }