@llryiop/avatar-boot-cli 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/docs/exam-question-generate-api.md +163 -0
  2. package/package.json +1 -1
  3. package/src/prompts.js +3 -3
  4. package/src/transform.js +1 -1
  5. package/templates/.claude/skills/avatar-boot-starter-feign/README.md +243 -0
  6. package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +47 -219
  7. package/templates/.claude/skills/avatar-boot-starter-feign/references//345/212/237/350/203/275/350/257/246/350/247/243.md +65 -0
  8. package/templates/.claude/skills/avatar-boot-starter-feign/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +75 -0
  9. package/templates/.claude/skills/avatar-boot-starter-feign/references//351/205/215/347/275/256/345/217/202/350/200/203.md +70 -0
  10. package/templates/.claude/skills/avatar-boot-starter-job/README.md +437 -0
  11. package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +35 -414
  12. package/templates/.claude/skills/avatar-boot-starter-job/references//345/270/270/350/247/201/351/227/256/351/242/230.md +55 -0
  13. package/templates/.claude/skills/avatar-boot-starter-job/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +124 -0
  14. package/templates/.claude/skills/avatar-boot-starter-job/references//347/233/221/346/216/247/346/214/207/346/240/207.md +72 -0
  15. package/templates/.claude/skills/avatar-boot-starter-kafka/README.md +580 -0
  16. package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +36 -560
  17. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/234/200/344/275/263/345/256/236/350/267/265.md +43 -0
  18. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/240/270/345/277/203/345/212/237/350/203/275.md +117 -0
  19. package/templates/.claude/skills/avatar-boot-starter-kafka/references//351/205/215/347/275/256/345/217/202/350/200/203.md +54 -0
  20. package/templates/.claude/skills/avatar-boot-starter-mysql/README.md +572 -0
  21. package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +40 -550
  22. package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/256/236/344/275/223/344/270/216/345/212/237/350/203/275.md +96 -0
  23. package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/346/225/260/346/215/256/346/272/220.md +91 -0
  24. package/templates/.claude/skills/avatar-boot-starter-mysql/references//351/253/230/347/272/247/347/211/271/346/200/247/344/270/216/351/205/215/347/275/256.md +59 -0
  25. package/templates/.claude/skills/avatar-boot-starter-nacos/README.md +901 -0
  26. package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +40 -879
  27. package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/212/237/350/203/275/344/275/277/347/224/250.md +134 -0
  28. package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +96 -0
  29. package/templates/.claude/skills/avatar-boot-starter-nacos/references//346/225/205/351/232/234/346/216/222/346/237/245.md +64 -0
  30. package/templates/.claude/skills/avatar-boot-starter-oss/README.md +594 -0
  31. package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +52 -570
  32. package/templates/.claude/skills/avatar-boot-starter-oss/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +77 -0
  33. package/templates/.claude/skills/avatar-boot-starter-oss/references//346/240/270/345/277/203/345/212/237/350/203/275.md +94 -0
  34. package/templates/.claude/skills/avatar-boot-starter-oss/references//350/247/204/350/214/203/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +61 -0
  35. package/templates/.claude/skills/avatar-boot-starter-redis/README.md +586 -0
  36. package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +42 -566
  37. package/templates/.claude/skills/avatar-boot-starter-redis/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +78 -0
  38. package/templates/.claude/skills/avatar-boot-starter-redis/references//346/225/260/346/215/256/346/223/215/344/275/234.md +111 -0
  39. package/templates/.claude/skills/avatar-boot-starter-redis/references//351/253/230/347/272/247/345/212/237/350/203/275.md +90 -0
  40. package/templates/.claude/skills/avatar-boot-starter-rocketmq/README.md +662 -0
  41. package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +48 -640
  42. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//346/240/270/345/277/203/345/212/237/350/203/275.md +101 -0
  43. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/205/215/347/275/256/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +44 -0
  44. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/253/230/347/272/247/347/211/271/346/200/247.md +71 -0
  45. package/templates/.claude/skills/avatar-boot-starter-web/README.md +1007 -0
  46. package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +150 -1003
  47. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-LogInfo/346/263/250/350/247/243.md +75 -0
  48. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206.md +90 -0
  49. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/214/207/346/240/207/347/233/221/346/216/247.md +74 -0
  50. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/227/245/345/277/227/344/275/223/347/263/273.md +73 -0
  51. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/350/257/267/346/261/202/344/270/212/344/270/213/346/226/207.md +77 -0
  52. package/templates/.claude/skills/avatar-boot-starter-web/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +52 -0
  53. package/templates/.claude/skills/avatar-boot-starter-web/references//346/263/250/346/204/217/344/272/213/351/241/271.md +68 -0
  54. package/templates/.claude/skills/avatar-boot-starter-web/references//350/207/252/345/256/232/344/271/211/346/211/251/345/261/225/346/214/207/345/215/227.md +107 -0
  55. package/templates/.claude/skills/avatar-boot-starter-web/references//351/205/215/347/275/256/345/217/202/350/200/203.md +107 -0
  56. package/templates/.claude/skills/crud-generator/SKILL.md +133 -64
  57. package/templates/.claude/skills/database-design/README.md +207 -0
  58. package/templates/.claude/skills/database-design/SKILL.md +469 -82
  59. package/templates/.claude/skills/database-design/references//345/221/275/345/220/215/350/247/204/350/214/203.md +232 -0
  60. package/templates/.claude/skills/database-design/references//345/255/227/346/256/265/347/261/273/345/236/213/350/247/204/350/214/203.md +400 -0
  61. package/templates/.claude/skills/database-design/references//347/264/242/345/274/225/350/247/204/350/214/203.md +506 -0
  62. package/templates/README.md +65 -100
  63. package/templates/avatar-scaffold-api/pom.xml +0 -5
  64. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/api/LoginFeignClient.java +2 -0
  65. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginErrorCode.java +25 -0
  66. package/templates/avatar-scaffold-service/pom.xml +25 -87
  67. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/feign/DemoFeign.java +4 -1
  68. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/UserLoginRepository.java +10 -0
  69. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/mapper/UserLoginMapper.java +4 -1
  70. package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +3 -5
  71. package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +21 -21
  72. package/templates/pom.xml +9 -18
@@ -0,0 +1,111 @@
1
+ # Redis 数据操作
2
+
3
+ ## String 操作
4
+
5
+ ```java
6
+ @Resource
7
+ private RedisStringClient redisStringClient;
8
+
9
+ // 设置值(带过期时间)
10
+ redisStringClient.set("key", "value", Duration.ofMinutes(5));
11
+
12
+ // 获取值
13
+ String value = redisStringClient.get("key");
14
+
15
+ // 递增
16
+ Long count = redisStringClient.increment("counter");
17
+
18
+ // 批量操作
19
+ Map<String, String> batch = Map.of("k1", "v1", "k2", "v2");
20
+ redisStringClient.multiSet(batch);
21
+ Map<String, String> result = redisStringClient.multiGet(batch.keySet());
22
+ ```
23
+
24
+ ## Hash 操作
25
+
26
+ ```java
27
+ @Resource
28
+ private RedisHashClient redisHashClient;
29
+
30
+ // 存储字段
31
+ redisHashClient.put("user:1", "name", "张三");
32
+ redisHashClient.put("user:1", "age", "25");
33
+
34
+ // 获取字段
35
+ String name = redisHashClient.get("user:1", "name");
36
+
37
+ // 获取所有字段
38
+ Map<Object, Object> user = redisHashClient.getAll("user:1");
39
+
40
+ // 递增字段
41
+ redisHashClient.increment("user:1", "age", 1);
42
+ ```
43
+
44
+ ## Set 操作
45
+
46
+ ```java
47
+ @Resource
48
+ private RedisSetClient redisSetClient;
49
+
50
+ // 添加成员
51
+ redisSetClient.add("tags", "java", "spring", "redis");
52
+
53
+ // 获取所有成员
54
+ Set<Object> tags = redisSetClient.members("tags");
55
+
56
+ // 判断是否存在
57
+ boolean exists = redisSetClient.isMember("tags", "java");
58
+
59
+ // 移除成员
60
+ redisSetClient.remove("tags", "redis");
61
+ ```
62
+
63
+ ## ZSet 操作
64
+
65
+ ```java
66
+ @Resource
67
+ private RedisZSetClient redisZSetClient;
68
+
69
+ // 添加成员(带分数)
70
+ redisZSetClient.add("ranking", "user1", 100.0);
71
+ redisZSetClient.add("ranking", "user2", 200.0);
72
+
73
+ // 获取排名(从高到低,取前10)
74
+ Set<Object> top = redisZSetClient.reverseRange("ranking", 0, 9);
75
+
76
+ // 获取分数
77
+ Double score = redisZSetClient.score("ranking", "user1");
78
+
79
+ // 递增分数
80
+ redisZSetClient.incrementScore("ranking", "user1", 10.0);
81
+ ```
82
+
83
+ ## 缓存操作
84
+
85
+ ```java
86
+ @Resource
87
+ private RedisCacheClient redisCacheClient;
88
+
89
+ // 设置缓存(自动 JSON 序列化)
90
+ redisCacheClient.set("cache:user:1", user, Duration.ofHours(1));
91
+
92
+ // 获取缓存(自动反序列化)
93
+ User user = redisCacheClient.get("cache:user:1", User.class);
94
+
95
+ // 删除缓存
96
+ redisCacheClient.delete("cache:user:1");
97
+
98
+ // 批量删除(按 pattern)
99
+ redisCacheClient.deletePattern("cache:user:*");
100
+ ```
101
+
102
+ ## Key 命名规范
103
+
104
+ 使用冒号分隔,格式:`业务:类型:ID`
105
+
106
+ ```
107
+ cache:user:123
108
+ lock:order:456
109
+ rate:api:sms
110
+ bloom:user:exists
111
+ ```
@@ -0,0 +1,90 @@
1
+ # Redis 高级功能
2
+
3
+ ## 分布式锁
4
+
5
+ ```java
6
+ @Resource
7
+ private RedissonLockClient lockClient;
8
+
9
+ // 方式一:回调方式(推荐,自动释放锁)
10
+ lockClient.lock("order:lock:123", 30, TimeUnit.SECONDS, () -> {
11
+ processOrder(orderId);
12
+ });
13
+
14
+ // 方式二:手动加锁/解锁
15
+ boolean locked = lockClient.tryLock("order:lock:123", 3, 30, TimeUnit.SECONDS);
16
+ if (locked) {
17
+ try {
18
+ processOrder(orderId);
19
+ } finally {
20
+ lockClient.unlock("order:lock:123"); // 必须释放
21
+ }
22
+ }
23
+ ```
24
+
25
+ **注意**:
26
+ - 锁超时时间要大于业务执行时间,避免锁提前释放
27
+ - 必须使用 try-finally 或回调方式,防止异常导致死锁
28
+ - 锁 Key 命名规范:`lock:{业务}:{唯一标识}`
29
+
30
+ ## 限流
31
+
32
+ ```java
33
+ @Resource
34
+ private RedisRateLimiterClient rateLimiterClient;
35
+
36
+ // 令牌桶限流(每秒最多 10 个请求)
37
+ boolean allowed = rateLimiterClient.tryAcquire("api:limit", 10, 1, TimeUnit.SECONDS);
38
+ if (allowed) {
39
+ // 处理请求
40
+ } else {
41
+ throw new BusinessException(ResultCode.TOO_MANY_REQUESTS, "请求过于频繁");
42
+ }
43
+
44
+ // 滑动窗口限流(60 秒内最多 10 次)
45
+ boolean allowed = rateLimiterClient.slidingWindowLimit("api:sms", 10, 60);
46
+ ```
47
+
48
+ **选择建议**:
49
+ - **令牌桶**:适合平滑限流,允许短时突发
50
+ - **滑动窗口**:适合精确控制时间窗口内的请求次数(如短信验证码)
51
+
52
+ ## 布隆过滤器
53
+
54
+ 适用于大数据量下的快速存在性判断(如防止缓存穿透):
55
+
56
+ ```java
57
+ @Resource
58
+ private RedisBloomFilterClient bloomFilterClient;
59
+
60
+ // 初始化(预期元素数量 100 万,误判率 0.01)
61
+ bloomFilterClient.init("user:bloom", 1000000, 0.01);
62
+
63
+ // 添加元素
64
+ bloomFilterClient.add("user:bloom", "user123");
65
+
66
+ // 判断是否存在(返回 false 一定不存在,返回 true 可能存在)
67
+ boolean exists = bloomFilterClient.contains("user:bloom", "user123");
68
+ ```
69
+
70
+ **防缓存穿透示例**:
71
+ ```java
72
+ public User getUser(Long userId) {
73
+ String key = String.valueOf(userId);
74
+ // 布隆过滤器快速判断
75
+ if (!bloomFilterClient.contains("user:bloom", key)) {
76
+ return null; // 一定不存在,直接返回
77
+ }
78
+ // 查缓存
79
+ User user = redisCacheClient.get("cache:user:" + userId, User.class);
80
+ if (user != null) return user;
81
+ // 查数据库
82
+ user = userMapper.selectById(userId);
83
+ if (user != null) {
84
+ redisCacheClient.set("cache:user:" + userId, user, Duration.ofHours(1));
85
+ }
86
+ return user;
87
+ }
88
+ ```
89
+
90
+ **注意**:布隆过滤器不支持删除元素,适合只增不删的场景。