@pencilps/avatar-boot-cli 1.0.0

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 (122) hide show
  1. package/README.md +309 -0
  2. package/bin/cli.js +3 -0
  3. package/package.json +34 -0
  4. package/src/index.js +78 -0
  5. package/src/prompts.js +78 -0
  6. package/src/template.js +37 -0
  7. package/src/transform.js +172 -0
  8. package/src/utils.js +34 -0
  9. package/templates/.claude/rules/architecture-redlines.md +146 -0
  10. package/templates/.claude/rules/code-review-standards.md +137 -0
  11. package/templates/.claude/rules/coding-standards.md +56 -0
  12. package/templates/.claude/rules/git-commit.md +59 -0
  13. package/templates/.claude/rules/layered-architecture.md +201 -0
  14. package/templates/.claude/rules/mybatis-plus.md +263 -0
  15. package/templates/.claude/rules/tech-stack.md +41 -0
  16. package/templates/.claude/rules/version.md +467 -0
  17. package/templates/.claude/skills/ai-tool-guide/SKILL.md +314 -0
  18. package/templates/.claude/skills/api-design/SKILL.md +200 -0
  19. package/templates/.claude/skills/api-doc-generator/SKILL.md +380 -0
  20. package/templates/.claude/skills/api-service-module-creator/SKILL.md +1114 -0
  21. package/templates/.claude/skills/avatar-boot-starter-feign/README.md +243 -0
  22. package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +71 -0
  23. package/templates/.claude/skills/avatar-boot-starter-feign/references//345/212/237/350/203/275/350/257/246/350/247/243.md +65 -0
  24. 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
  25. package/templates/.claude/skills/avatar-boot-starter-feign/references//351/205/215/347/275/256/345/217/202/350/200/203.md +70 -0
  26. package/templates/.claude/skills/avatar-boot-starter-job/README.md +437 -0
  27. package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +58 -0
  28. package/templates/.claude/skills/avatar-boot-starter-job/references//345/270/270/350/247/201/351/227/256/351/242/230.md +55 -0
  29. 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
  30. package/templates/.claude/skills/avatar-boot-starter-job/references//347/233/221/346/216/247/346/214/207/346/240/207.md +72 -0
  31. package/templates/.claude/skills/avatar-boot-starter-kafka/README.md +580 -0
  32. package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +56 -0
  33. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/234/200/344/275/263/345/256/236/350/267/265.md +43 -0
  34. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/240/270/345/277/203/345/212/237/350/203/275.md +117 -0
  35. package/templates/.claude/skills/avatar-boot-starter-kafka/references//351/205/215/347/275/256/345/217/202/350/200/203.md +54 -0
  36. package/templates/.claude/skills/avatar-boot-starter-mysql/README.md +572 -0
  37. package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +62 -0
  38. 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
  39. 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
  40. 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
  41. package/templates/.claude/skills/avatar-boot-starter-nacos/README.md +901 -0
  42. package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +62 -0
  43. package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/212/237/350/203/275/344/275/277/347/224/250.md +134 -0
  44. 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
  45. package/templates/.claude/skills/avatar-boot-starter-nacos/references//346/225/205/351/232/234/346/216/222/346/237/245.md +64 -0
  46. package/templates/.claude/skills/avatar-boot-starter-oss/README.md +594 -0
  47. package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +76 -0
  48. 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
  49. package/templates/.claude/skills/avatar-boot-starter-oss/references//346/240/270/345/277/203/345/212/237/350/203/275.md +94 -0
  50. 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
  51. package/templates/.claude/skills/avatar-boot-starter-redis/README.md +586 -0
  52. package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +62 -0
  53. 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
  54. package/templates/.claude/skills/avatar-boot-starter-redis/references//346/225/260/346/215/256/346/223/215/344/275/234.md +111 -0
  55. package/templates/.claude/skills/avatar-boot-starter-redis/references//351/253/230/347/272/247/345/212/237/350/203/275.md +90 -0
  56. package/templates/.claude/skills/avatar-boot-starter-rocketmq/README.md +662 -0
  57. package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +70 -0
  58. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//346/240/270/345/277/203/345/212/237/350/203/275.md +101 -0
  59. 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
  60. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/253/230/347/272/247/347/211/271/346/200/247.md +71 -0
  61. package/templates/.claude/skills/avatar-boot-starter-web/README.md +1007 -0
  62. package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +154 -0
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. package/templates/.claude/skills/avatar-boot-starter-web/references//346/263/250/346/204/217/344/272/213/351/241/271.md +68 -0
  70. 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
  71. package/templates/.claude/skills/avatar-boot-starter-web/references//351/205/215/347/275/256/345/217/202/350/200/203.md +107 -0
  72. package/templates/.claude/skills/changelog-generator/SKILL.md +114 -0
  73. package/templates/.claude/skills/code-review/SKILL.md +239 -0
  74. package/templates/.claude/skills/crud-generator/SKILL.md +893 -0
  75. package/templates/.claude/skills/database-design/README.md +207 -0
  76. package/templates/.claude/skills/database-design/SKILL.md +764 -0
  77. package/templates/.claude/skills/database-design/references//345/221/275/345/220/215/350/247/204/350/214/203.md +232 -0
  78. 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
  79. package/templates/.claude/skills/database-design/references//347/264/242/345/274/225/350/247/204/350/214/203.md +506 -0
  80. package/templates/.claude/skills/deployment-config/SKILL.md +277 -0
  81. package/templates/.claude/skills/incident-analysis/SKILL.md +241 -0
  82. package/templates/.claude/skills/integration-test-generator/SKILL.md +496 -0
  83. package/templates/.claude/skills/prompt-engineering/SKILL.md +249 -0
  84. package/templates/.claude/skills/requirement-management/SKILL.md +244 -0
  85. package/templates/.claude/skills/security-audit/SKILL.md +330 -0
  86. package/templates/.claude/skills/test-case-design/SKILL.md +257 -0
  87. package/templates/.claude/skills/testing-workflow/SKILL.md +68 -0
  88. package/templates/.claude/skills/troubleshooting/SKILL.md +240 -0
  89. package/templates/CLAUDE.md +173 -0
  90. package/templates/README.md +268 -0
  91. package/templates/avatar-scaffold-api/pom.xml +36 -0
  92. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/api/LoginFeignClient.java +42 -0
  93. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/constant/LoginConstant.java +21 -0
  94. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/LoginRequest.java +17 -0
  95. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/RefreshTokenRequest.java +14 -0
  96. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/LoginResponse.java +31 -0
  97. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/TokenInfoResponse.java +25 -0
  98. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/enums/LoginTypeEnum.java +23 -0
  99. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginErrorCode.java +25 -0
  100. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginException.java +23 -0
  101. package/templates/avatar-scaffold-service/k8s-app/Dockerfile +14 -0
  102. package/templates/avatar-scaffold-service/k8s-app/Dockerfile-arm64 +14 -0
  103. package/templates/avatar-scaffold-service/packaging/assembly.xml +16 -0
  104. package/templates/avatar-scaffold-service/pom.xml +88 -0
  105. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/Application.java +21 -0
  106. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/config/LoginConfig.java +20 -0
  107. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/controller/LoginController.java +37 -0
  108. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/converter/LoginConverter.java +54 -0
  109. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/feign/DemoFeign.java +24 -0
  110. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/UserLoginRepository.java +10 -0
  111. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserLoginEntity.java +33 -0
  112. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserTokenEntity.java +39 -0
  113. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/mapper/UserLoginMapper.java +23 -0
  114. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/LoginService.java +22 -0
  115. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/impl/LoginServiceImpl.java +43 -0
  116. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/utils/LoginUtils.java +31 -0
  117. package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +26 -0
  118. package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +61 -0
  119. package/templates/avatar-scaffold-service/src/main/resources/application-prod.yaml +25 -0
  120. package/templates/avatar-scaffold-service/src/main/resources/application-test.yaml +26 -0
  121. package/templates/avatar-scaffold-service/src/main/resources/application.yaml +12 -0
  122. package/templates/pom.xml +89 -0
@@ -0,0 +1,43 @@
1
+ # Kafka 最佳实践与注意事项
2
+
3
+ ## 最佳实践
4
+
5
+ 1. **消息 Key 设计**:使用业务唯一标识作为 Key,保证相关消息的顺序性
6
+ ```java
7
+ kafkaTemplate.send("order-topic", order.getOrderId(), JSON.toJSONString(order));
8
+ ```
9
+
10
+ 2. **幂等处理**:消费者必须做幂等处理,避免重复消费
11
+ ```java
12
+ @KafkaListener(topics = "order-topic", groupId = "order-group")
13
+ public void consume(String message) {
14
+ String orderId = extractOrderId(message);
15
+ if (orderService.isProcessed(orderId)) return; // 幂等检查
16
+ orderService.process(message);
17
+ }
18
+ ```
19
+
20
+ 3. **异常处理**:消费失败时记录日志,必要时发送到死信队列
21
+ ```java
22
+ @KafkaListener(topics = "order-topic", groupId = "order-group")
23
+ public void consume(String message) {
24
+ try {
25
+ processMessage(message);
26
+ } catch (Exception e) {
27
+ log.error("消费失败,发送死信队列: {}", message, e);
28
+ kafkaTemplate.send("order-topic-dlq", message);
29
+ }
30
+ }
31
+ ```
32
+
33
+ 4. **分区数量**:合理设置分区数量,提高并发消费能力(分区数 = 最大并发消费者数)
34
+
35
+ 5. **监控告警**:监控消息堆积、消费延迟、分区分布等指标
36
+
37
+ ## 注意事项
38
+
39
+ 1. **Topic 创建**:使用前需要创建 Topic,或开启 Kafka 自动创建 Topic
40
+ 2. **消费者组**:同一消费者组的实例会负载均衡消费消息,不同组会各自消费全量消息
41
+ 3. **消息顺序**:同一分区内的消息保证顺序,不同分区不保证
42
+ 4. **偏移量管理**:注意偏移量提交时机,`enable-auto-commit: false` 时需手动提交
43
+ 5. **消息大小**:默认最大消息大小 1MB,超大消息需调整 `max.message.bytes`
@@ -0,0 +1,117 @@
1
+ # Kafka 核心功能
2
+
3
+ ## 1. 添加依赖
4
+
5
+ ```xml
6
+ <dependency>
7
+ <groupId>com.iflytek.avatar.boot</groupId>
8
+ <artifactId>avatar-boot-starter-kafka</artifactId>
9
+ </dependency>
10
+ ```
11
+
12
+ ## 2. 配置 Kafka
13
+
14
+ ```yaml
15
+ avatar:
16
+ kafka:
17
+ bootstrap-servers: ${KAFKA_SERVERS:localhost:9092}
18
+ producer:
19
+ acks: all
20
+ retries: 3
21
+ batch-size: 16384
22
+ buffer-memory: 33554432
23
+ key-serializer: org.apache.kafka.common.serialization.StringSerializer
24
+ value-serializer: org.apache.kafka.common.serialization.StringSerializer
25
+ consumer:
26
+ group-id: ${spring.application.name}
27
+ auto-offset-reset: earliest
28
+ enable-auto-commit: true
29
+ auto-commit-interval: 1000
30
+ key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
31
+ value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
32
+ ```
33
+
34
+ ## 3. 发送消息
35
+
36
+ ```java
37
+ @Resource
38
+ private KafkaTemplate<String, String> kafkaTemplate;
39
+
40
+ // 同步发送
41
+ SendResult<String, String> result = kafkaTemplate.send(topic, message).get();
42
+
43
+ // 异步发送
44
+ kafkaTemplate.send(topic, message).addCallback(
45
+ result -> log.info("发送成功: {}", result.getRecordMetadata().offset()),
46
+ ex -> log.error("发送失败: {}", ex.getMessage())
47
+ );
48
+
49
+ // 发送带 Key 的消息(保证相同 Key 进入同一分区)
50
+ kafkaTemplate.send(topic, key, message);
51
+
52
+ // 批量发送
53
+ messages.forEach(msg -> kafkaTemplate.send(topic, msg));
54
+ ```
55
+
56
+ ## 4. 消费消息
57
+
58
+ ```java
59
+ @Component
60
+ public class OrderConsumer {
61
+
62
+ // 基础消费
63
+ @KafkaListener(topics = "order-topic", groupId = "order-consumer-group")
64
+ public void consume(String message) {
65
+ // 处理业务逻辑
66
+ }
67
+
68
+ // 消费带 Key 的消息
69
+ @KafkaListener(topics = "order-topic", groupId = "order-consumer-group")
70
+ public void consumeWithKey(
71
+ @Payload String message,
72
+ @Header(KafkaHeaders.RECEIVED_MESSAGE_KEY) String key) {
73
+ log.info("Key: {}, Message: {}", key, message);
74
+ }
75
+
76
+ // 批量消费
77
+ @KafkaListener(topics = "order-topic", groupId = "order-consumer-group")
78
+ public void consumeBatch(List<String> messages) {
79
+ messages.forEach(this::processMessage);
80
+ }
81
+
82
+ // 手动提交偏移量(enable-auto-commit: false 时使用)
83
+ @KafkaListener(topics = "order-topic", groupId = "order-consumer-group")
84
+ public void consumeManual(String message, Acknowledgment acknowledgment) {
85
+ try {
86
+ processMessage(message);
87
+ acknowledgment.acknowledge(); // 手动提交
88
+ } catch (Exception e) {
89
+ log.error("处理失败,不提交偏移量: {}", e.getMessage());
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ ## 5. 事务消息
96
+
97
+ ```java
98
+ @Service
99
+ public class OrderService {
100
+
101
+ @Resource
102
+ private KafkaTemplate<String, String> kafkaTemplate;
103
+
104
+ @Transactional
105
+ public void createOrderWithTransaction(Order order) {
106
+ // 保存订单到数据库
107
+ orderMapper.insert(order);
108
+
109
+ // 在同一事务中发送 Kafka 消息
110
+ kafkaTemplate.executeInTransaction(operations -> {
111
+ operations.send("order-topic", JSON.toJSONString(order));
112
+ operations.send("inventory-topic", JSON.toJSONString(order));
113
+ return true;
114
+ });
115
+ }
116
+ }
117
+ ```
@@ -0,0 +1,54 @@
1
+ # Kafka 配置参考
2
+
3
+ ## 完整配置项
4
+
5
+ ```yaml
6
+ avatar:
7
+ kafka:
8
+ bootstrap-servers: localhost:9092 # Kafka 服务器地址
9
+
10
+ producer:
11
+ acks: all # 确认模式:0/1/all
12
+ retries: 3 # 重试次数
13
+ batch-size: 16384 # 批量大小(字节)
14
+ buffer-memory: 33554432 # 缓冲区大小(字节,32MB)
15
+ key-serializer: org.apache.kafka.common.serialization.StringSerializer
16
+ value-serializer: org.apache.kafka.common.serialization.StringSerializer
17
+
18
+ consumer:
19
+ group-id: my-consumer-group # 消费者组 ID(必填)
20
+ auto-offset-reset: earliest # 偏移量重置策略:earliest/latest
21
+ enable-auto-commit: true # 是否自动提交偏移量
22
+ auto-commit-interval: 1000 # 自动提交间隔(毫秒)
23
+ key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
24
+ value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
25
+ ```
26
+
27
+ ## 配置说明
28
+
29
+ | 配置项 | 说明 | 默认值 |
30
+ |:--|:--|:--|
31
+ | `bootstrap-servers` | Kafka 服务器地址 | `localhost:9092` |
32
+ | `producer.acks` | 确认模式(0=不确认/1=Leader确认/all=全部确认) | `all` |
33
+ | `producer.retries` | 发送失败重试次数 | `3` |
34
+ | `consumer.group-id` | 消费者组 ID | - |
35
+ | `consumer.auto-offset-reset` | 无偏移量时的策略(earliest从头/latest从最新) | `earliest` |
36
+ | `consumer.enable-auto-commit` | 是否自动提交偏移量 | `true` |
37
+
38
+ ## 多环境配置
39
+
40
+ ```yaml
41
+ # application-dev.yml
42
+ avatar:
43
+ kafka:
44
+ bootstrap-servers: localhost:9092
45
+ consumer:
46
+ group-id: ${spring.application.name}-dev
47
+
48
+ # application-prod.yml
49
+ avatar:
50
+ kafka:
51
+ bootstrap-servers: ${KAFKA_SERVERS}
52
+ consumer:
53
+ group-id: ${spring.application.name}
54
+ ```