ai-engineering-init 1.1.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 (313) hide show
  1. package/.claude/agents/code-reviewer.md +139 -0
  2. package/.claude/agents/project-manager.md +159 -0
  3. package/.claude/audio/completed.wav +0 -0
  4. package/.claude/commands/add-todo.md +255 -0
  5. package/.claude/commands/check.md +210 -0
  6. package/.claude/commands/crud.md +454 -0
  7. package/.claude/commands/dev.md +503 -0
  8. package/.claude/commands/init-docs.md +681 -0
  9. package/.claude/commands/next.md +251 -0
  10. package/.claude/commands/progress.md +242 -0
  11. package/.claude/commands/start.md +199 -0
  12. package/.claude/commands/sync.md +307 -0
  13. package/.claude/commands/update-status.md +428 -0
  14. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  15. package/.claude/docs/README.md +167 -0
  16. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  17. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  18. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  19. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  20. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  21. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  22. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  23. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  24. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  25. package/.claude/framework-config.json +73 -0
  26. package/.claude/hooks/pre-tool-use.js +117 -0
  27. package/.claude/hooks/skill-forced-eval.js +167 -0
  28. package/.claude/hooks/stop.js +58 -0
  29. package/.claude/settings.json +41 -0
  30. package/.claude/skills/add-skill/SKILL.md +352 -0
  31. package/.claude/skills/api-development/SKILL.md +560 -0
  32. package/.claude/skills/architecture-design/SKILL.md +756 -0
  33. package/.claude/skills/backend-annotations/SKILL.md +674 -0
  34. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  35. package/.claude/skills/banana-image/README.md +146 -0
  36. package/.claude/skills/banana-image/SKILL.md +164 -0
  37. package/.claude/skills/banana-image/assets/logo.png +0 -0
  38. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  39. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  40. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  41. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  42. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  43. package/.claude/skills/banana-image/scripts/package.json +18 -0
  44. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  45. package/.claude/skills/banana-image/templates/poster.json +22 -0
  46. package/.claude/skills/banana-image/templates/product.json +17 -0
  47. package/.claude/skills/banana-image/templates/social.json +22 -0
  48. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  49. package/.claude/skills/brainstorm/SKILL.md +648 -0
  50. package/.claude/skills/bug-detective/SKILL.md +1206 -0
  51. package/.claude/skills/code-patterns/SKILL.md +590 -0
  52. package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
  53. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  54. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  55. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  56. package/.claude/skills/crud-development/SKILL.md +649 -0
  57. package/.claude/skills/data-permission/SKILL.md +599 -0
  58. package/.claude/skills/database-ops/SKILL.md +407 -0
  59. package/.claude/skills/error-handler/SKILL.md +371 -0
  60. package/.claude/skills/file-oss-management/SKILL.md +863 -0
  61. package/.claude/skills/git-workflow/SKILL.md +375 -0
  62. package/.claude/skills/json-serialization/SKILL.md +357 -0
  63. package/.claude/skills/leniu-api-development/SKILL.md +803 -0
  64. package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
  65. package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
  66. package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
  67. package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
  68. package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
  69. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  70. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  71. package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
  72. package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
  73. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  74. package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
  75. package/.claude/skills/leniu-java-export/SKILL.md +560 -0
  76. package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
  77. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  78. package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
  79. package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
  80. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  81. package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
  82. package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  83. package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  84. package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
  85. package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
  86. package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
  87. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  88. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  89. package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
  90. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  91. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  92. package/.claude/skills/openspec-explore/SKILL.md +290 -0
  93. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  94. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  95. package/.claude/skills/openspec-onboard/SKILL.md +529 -0
  96. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  97. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  98. package/.claude/skills/performance-doctor/SKILL.md +627 -0
  99. package/.claude/skills/project-navigator/SKILL.md +305 -0
  100. package/.claude/skills/redis-cache/SKILL.md +839 -0
  101. package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
  102. package/.claude/skills/security-guard/SKILL.md +748 -0
  103. package/.claude/skills/sms-mail/SKILL.md +766 -0
  104. package/.claude/skills/social-login/SKILL.md +668 -0
  105. package/.claude/skills/store-pc/SKILL.md +366 -0
  106. package/.claude/skills/task-tracker/SKILL.md +307 -0
  107. package/.claude/skills/tech-decision/SKILL.md +393 -0
  108. package/.claude/skills/tenant-management/SKILL.md +603 -0
  109. package/.claude/skills/test-development/SKILL.md +755 -0
  110. package/.claude/skills/ui-pc/SKILL.md +438 -0
  111. package/.claude/skills/utils-toolkit/SKILL.md +615 -0
  112. package/.claude/skills/websocket-sse/SKILL.md +716 -0
  113. package/.claude/skills/workflow-engine/SKILL.md +676 -0
  114. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  115. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  116. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  117. package/.codex/skills/add-skill/SKILL.md +352 -0
  118. package/.codex/skills/add-todo/SKILL.md +269 -0
  119. package/.codex/skills/api-development/SKILL.md +693 -0
  120. package/.codex/skills/architecture-design/SKILL.md +628 -0
  121. package/.codex/skills/backend-annotations/SKILL.md +664 -0
  122. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  123. package/.codex/skills/banana-image/README.md +146 -0
  124. package/.codex/skills/banana-image/SKILL.md +164 -0
  125. package/.codex/skills/banana-image/assets/logo.png +0 -0
  126. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  127. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  128. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  129. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  130. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  131. package/.codex/skills/banana-image/scripts/package.json +18 -0
  132. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  133. package/.codex/skills/banana-image/templates/poster.json +22 -0
  134. package/.codex/skills/banana-image/templates/product.json +17 -0
  135. package/.codex/skills/banana-image/templates/social.json +22 -0
  136. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  137. package/.codex/skills/brainstorm/SKILL.md +648 -0
  138. package/.codex/skills/bug-detective/SKILL.md +1206 -0
  139. package/.codex/skills/check/SKILL.md +367 -0
  140. package/.codex/skills/code-patterns/SKILL.md +442 -0
  141. package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
  142. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  143. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  144. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  145. package/.codex/skills/crud/SKILL.md +265 -0
  146. package/.codex/skills/crud-development/SKILL.md +637 -0
  147. package/.codex/skills/data-permission/SKILL.md +591 -0
  148. package/.codex/skills/database-ops/SKILL.md +553 -0
  149. package/.codex/skills/dev/SKILL.md +187 -0
  150. package/.codex/skills/error-handler/SKILL.md +361 -0
  151. package/.codex/skills/file-oss-management/SKILL.md +863 -0
  152. package/.codex/skills/git-workflow/SKILL.md +375 -0
  153. package/.codex/skills/init-docs/SKILL.md +194 -0
  154. package/.codex/skills/json-serialization/SKILL.md +357 -0
  155. package/.codex/skills/leniu-api-development/SKILL.md +803 -0
  156. package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
  157. package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
  158. package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
  159. package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
  160. package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
  161. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  162. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  163. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  164. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  165. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  166. package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
  167. package/.codex/skills/leniu-java-export/SKILL.md +560 -0
  168. package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
  169. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  170. package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
  171. package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
  172. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  173. package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
  174. package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  175. package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  176. package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
  177. package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
  178. package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
  179. package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
  180. package/.codex/skills/next/SKILL.md +137 -0
  181. package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
  182. package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
  183. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  184. package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
  185. package/.codex/skills/openspec-explore/SKILL.md +290 -0
  186. package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
  187. package/.codex/skills/openspec-new-change/SKILL.md +74 -0
  188. package/.codex/skills/openspec-onboard/SKILL.md +529 -0
  189. package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
  190. package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
  191. package/.codex/skills/performance-doctor/SKILL.md +627 -0
  192. package/.codex/skills/progress/SKILL.md +193 -0
  193. package/.codex/skills/project-navigator/SKILL.md +286 -0
  194. package/.codex/skills/redis-cache/SKILL.md +829 -0
  195. package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
  196. package/.codex/skills/security-guard/SKILL.md +739 -0
  197. package/.codex/skills/sms-mail/SKILL.md +766 -0
  198. package/.codex/skills/social-login/SKILL.md +668 -0
  199. package/.codex/skills/start/SKILL.md +154 -0
  200. package/.codex/skills/store-pc/SKILL.md +491 -0
  201. package/.codex/skills/sync/SKILL.md +149 -0
  202. package/.codex/skills/task-tracker/SKILL.md +307 -0
  203. package/.codex/skills/tech-decision/SKILL.md +393 -0
  204. package/.codex/skills/tenant-management/SKILL.md +603 -0
  205. package/.codex/skills/test-development/SKILL.md +755 -0
  206. package/.codex/skills/ui-pc/SKILL.md +475 -0
  207. package/.codex/skills/update-status/SKILL.md +159 -0
  208. package/.codex/skills/utils-toolkit/SKILL.md +593 -0
  209. package/.codex/skills/websocket-sse/SKILL.md +716 -0
  210. package/.codex/skills/workflow-engine/SKILL.md +676 -0
  211. package/.cursor/agents/code-reviewer.md +139 -0
  212. package/.cursor/agents/project-manager.md +159 -0
  213. package/.cursor/commands/opsx-apply.md +152 -0
  214. package/.cursor/commands/opsx-archive.md +157 -0
  215. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  216. package/.cursor/commands/opsx-continue.md +114 -0
  217. package/.cursor/commands/opsx-explore.md +174 -0
  218. package/.cursor/commands/opsx-ff.md +94 -0
  219. package/.cursor/commands/opsx-new.md +69 -0
  220. package/.cursor/commands/opsx-onboard.md +525 -0
  221. package/.cursor/commands/opsx-sync.md +134 -0
  222. package/.cursor/commands/opsx-verify.md +164 -0
  223. package/.cursor/mcp.json +22 -0
  224. package/.cursor/skills/add-skill/SKILL.md +352 -0
  225. package/.cursor/skills/api-development/SKILL.md +560 -0
  226. package/.cursor/skills/architecture-design/SKILL.md +756 -0
  227. package/.cursor/skills/backend-annotations/SKILL.md +674 -0
  228. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  229. package/.cursor/skills/banana-image/README.md +146 -0
  230. package/.cursor/skills/banana-image/SKILL.md +164 -0
  231. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  232. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  233. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  234. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  235. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  236. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  237. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  238. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  239. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  240. package/.cursor/skills/banana-image/templates/product.json +17 -0
  241. package/.cursor/skills/banana-image/templates/social.json +22 -0
  242. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  243. package/.cursor/skills/brainstorm/SKILL.md +648 -0
  244. package/.cursor/skills/bug-detective/SKILL.md +1206 -0
  245. package/.cursor/skills/code-patterns/SKILL.md +590 -0
  246. package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
  247. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  248. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  249. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  250. package/.cursor/skills/crud-development/SKILL.md +649 -0
  251. package/.cursor/skills/data-permission/SKILL.md +599 -0
  252. package/.cursor/skills/database-ops/SKILL.md +407 -0
  253. package/.cursor/skills/error-handler/SKILL.md +371 -0
  254. package/.cursor/skills/file-oss-management/SKILL.md +863 -0
  255. package/.cursor/skills/git-workflow/SKILL.md +375 -0
  256. package/.cursor/skills/json-serialization/SKILL.md +357 -0
  257. package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
  258. package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
  259. package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
  260. package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
  261. package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
  262. package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
  263. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  264. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  265. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  266. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  267. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  268. package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
  269. package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
  270. package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
  271. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  272. package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
  273. package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
  274. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  275. package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
  276. package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  277. package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  278. package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
  279. package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
  280. package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
  281. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  282. package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
  283. package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
  284. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  285. package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
  286. package/.cursor/skills/openspec-explore/SKILL.md +290 -0
  287. package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
  288. package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
  289. package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
  290. package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
  291. package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
  292. package/.cursor/skills/performance-doctor/SKILL.md +627 -0
  293. package/.cursor/skills/project-navigator/SKILL.md +305 -0
  294. package/.cursor/skills/redis-cache/SKILL.md +839 -0
  295. package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
  296. package/.cursor/skills/security-guard/SKILL.md +748 -0
  297. package/.cursor/skills/sms-mail/SKILL.md +766 -0
  298. package/.cursor/skills/social-login/SKILL.md +668 -0
  299. package/.cursor/skills/store-pc/SKILL.md +366 -0
  300. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  301. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  302. package/.cursor/skills/tenant-management/SKILL.md +603 -0
  303. package/.cursor/skills/test-development/SKILL.md +755 -0
  304. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  305. package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
  306. package/.cursor/skills/websocket-sse/SKILL.md +716 -0
  307. package/.cursor/skills/workflow-engine/SKILL.md +676 -0
  308. package/AGENTS.md +669 -0
  309. package/CLAUDE.md +205 -0
  310. package/README.md +205 -0
  311. package/bin/index.js +179 -0
  312. package/init.sh +178 -0
  313. package/package.json +27 -0
@@ -0,0 +1,594 @@
1
+ ---
2
+ name: leniu-architecture-design
3
+ description: |
4
+ leniu-yunshitang-core 项目架构设计指南。基于 pigx-framework 框架的云食堂双库架构,包含三层架构规范、双库多租户实现、业务模块划分、Entity 设计规范。
5
+
6
+ 触发场景:
7
+ - 云食堂项目系统整体架构设计
8
+ - 双库架构(系统库+商户库)的业务模块规划
9
+ - 三层架构代码分层与重构策略
10
+ - 多租户数据隔离设计
11
+ - Entity 审计字段与逻辑删除设计
12
+
13
+ 触发词:leniu架构、云食堂架构、双库架构、商户库、系统库、net.xnzn、pigx框架
14
+ ---
15
+
16
+ # leniu-yunshitang-core 架构设计指南
17
+
18
+ ## 项目概述
19
+
20
+ leniu-yunshitang-core 是基于 **pigx-framework** 的智慧食堂云服务平台,采用**双库架构**(系统库 + 商户库)实现多租户隔离。
21
+
22
+ **核心特点:**
23
+ - JDK 21 + Spring Boot 3.x
24
+ - 双库架构:系统库(全局数据)+ 商户库(租户数据)
25
+ - 包名:`net.xnzn.*`
26
+ - 租户识别:请求头 `MERCHANT-ID`
27
+ - 审计字段:`crby/crtime/upby/uptime`
28
+ - 逻辑删除:`del_flag`(1=删除,2=正常,注意与 RuoYi 相反)
29
+
30
+ ---
31
+
32
+ ## 双库架构设计
33
+
34
+ ### 架构说明
35
+
36
+ 本项目采用**物理分离的双库架构**,而非单库多租户:
37
+
38
+ | 库类型 | 说明 | 数据范围 | 访问方式 |
39
+ |--------|------|---------|---------|
40
+ | **系统库** | 全局系统数据 | 租户信息、商户配置、系统字典等 | 默认访问(无 MERCHANT-ID) |
41
+ | **商户库** | 租户业务数据 | 订单、菜品、用户、设备等商户数据 | 请求头携带 MERCHANT-ID 时访问 |
42
+
43
+ **关键区别:**
44
+ - Entity 不需要 `tenant_id` 字段(物理库隔离)
45
+ - 通过 `TenantContextHolder.getTenantId()` 获取当前租户
46
+ - 使用 `Executors.doInTenant()` / `doInSystem()` 切换库
47
+
48
+ ### 双库配置示例
49
+
50
+ ```yaml
51
+ # bootstrap.yml
52
+ dataset:
53
+ system:
54
+ master:
55
+ jdbcUrl: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/system
56
+ username: ${MYSQL_USERNAME:root}
57
+ password: ${MYSQL_PASSWORD:do@u.can}
58
+
59
+ tenant:
60
+ carrier-name: MERCHANT-ID
61
+ ```
62
+
63
+ ### 多租户上下文
64
+
65
+ ```java
66
+ // 获取当前租户ID
67
+ Long tenantId = TenantContextHolder.getTenantId();
68
+
69
+ // 在指定租户库执行操作
70
+ Executors.doInTenant(tenantId, () -> {
71
+ // 业务代码 - 访问商户库
72
+ });
73
+
74
+ // 在系统库执行操作
75
+ Executors.doInSystem(() -> {
76
+ // 业务代码 - 访问系统库
77
+ });
78
+
79
+ // 遍历所有租户执行
80
+ Executors.doInAllTenant(tenantId -> {
81
+ // 业务代码
82
+ });
83
+ ```
84
+
85
+ ---
86
+
87
+ ## 本项目技术栈
88
+
89
+ ### 核心技术栈
90
+
91
+ | 层级 | 技术栈 | 版本 | 说明 |
92
+ |------|--------|------|------|
93
+ | **后端框架** | Spring Boot | 3.x | 核心框架 |
94
+ | **开发语言** | Java | 21 | LTS 版本 |
95
+ | **ORM** | MyBatis-Plus | 3.x | 持久层框架 |
96
+ | **基础框架** | pigx-framework | 3.4.7 | 企业级开发框架 |
97
+ | **数据库** | MySQL | 8.0+ | 双库架构 |
98
+ | **缓存** | Redis + Redisson | - | 分布式缓存 |
99
+ | **容器** | Undertow | - | Web 容器(替换 Tomcat) |
100
+
101
+ ### 项目模块结构
102
+
103
+ ```
104
+ leniu-tengyun-core/
105
+ ├── core-base/ # 公共基础模块
106
+ ├── core-aggregator/ # 聚合器
107
+ ├── sys-common/ # 公共业务模块(支付、通知、对接等)
108
+ ├── sys-canteen/ # 食堂业务模块
109
+ ├── sys-kitchen/ # 后场厨房模块
110
+ ├── sys-drp/ # 供应链模块
111
+ ├── sys-logistics/ # 物流模块
112
+ └── sys-open/ # 开放接口模块
113
+ ```
114
+
115
+ ---
116
+
117
+ ## 三层架构规范
118
+
119
+ 本项目采用 **三层架构**:Controller → Service → Mapper
120
+
121
+ **没有独立的 DAO 层!**
122
+
123
+ ```
124
+ ┌──────────────────────────────────────────────────────────────┐
125
+ │ Controller 层 │
126
+ │ • 接收 HTTP 请求、参数校验、返回 Page<T> │
127
+ │ • 使用 LeRequest<T> 封装请求体 │
128
+ │ • 使用 @RequiresAuthentication 权限控制 │
129
+ └──────────────────────────────┬───────────────────────────────┘
130
+
131
+
132
+ ┌──────────────────────────────────────────────────────────────┐
133
+ │ Service 层 │
134
+ │ • 业务逻辑处理、事务管理、编排协调 │
135
+ │ • 直接注入 Mapper(无 DAO 层) │
136
+ │ • 使用 MyBatis-Plus LambdaQueryWrapper │
137
+ └──────────────────────────────┬───────────────────────────────┘
138
+
139
+
140
+ ┌──────────────────────────────────────────────────────────────┐
141
+ │ Mapper 层 │
142
+ │ • extends BaseMapper<Entity> │
143
+ │ • MyBatis-Plus ORM 映射、SQL 执行 │
144
+ └──────────────────────────────────────────────────────────────┘
145
+ ```
146
+
147
+ ### Controller 示例
148
+
149
+ ```java
150
+ package net.xnzn.core.xxx.controller;
151
+
152
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
153
+ import com.pig4cloud.pigx.common.core.util.LeRequest;
154
+ import com.pig4cloud.pigx.common.core.exception.LeException;
155
+ import net.xnzn.framework.secure.filter.annotation.RequiresAuthentication;
156
+ import org.springframework.web.bind.annotation.*;
157
+
158
+ @RestController
159
+ @RequiresAuthentication
160
+ @RequestMapping("/xxx/resource")
161
+ public class XxxResourceController {
162
+
163
+ @Autowired
164
+ private XxxServiceImpl xxxService;
165
+
166
+ @PostMapping("/add")
167
+ public void add(@Validated @RequestBody LeRequest<XxxDTO> request) {
168
+ xxxService.add(request.getContent());
169
+ }
170
+
171
+ @PostMapping("/query")
172
+ public Page<XxxVO> query(@Validated @RequestBody LeRequest<PageDTO> request) {
173
+ return xxxService.query(request.getContent());
174
+ }
175
+ }
176
+ ```
177
+
178
+ ### Service 示例
179
+
180
+ ```java
181
+ package net.xnzn.core.xxx.service.impl;
182
+
183
+ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
184
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
185
+ import net.xnzn.core.common.enums.DelFlagEnum;
186
+ import net.xnzn.framework.id.Id;
187
+ import org.springframework.stereotype.Service;
188
+
189
+ @Service
190
+ public class XxxServiceImpl {
191
+ @Autowired
192
+ private XxxMapper xxxMapper;
193
+
194
+ public void add(XxxDTO dto) {
195
+ long id = Id.next();
196
+ XxxEntity entity = dto.toEntity(id);
197
+ xxxMapper.insert(entity);
198
+ }
199
+
200
+ public Page<XxxVO> query(PageDTO dto) {
201
+ return xxxMapper.page(dto.getMpPage(), dto.getKeyword());
202
+ }
203
+ }
204
+ ```
205
+
206
+ ### Mapper 示例
207
+
208
+ ```java
209
+ package net.xnzn.core.xxx.mapper;
210
+
211
+ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
212
+ import net.xnzn.core.xxx.model.XxxEntity;
213
+ import org.apache.ibatis.annotations.Mapper;
214
+
215
+ @Mapper
216
+ public interface XxxMapper extends BaseMapper<XxxEntity> {
217
+ // 自定义查询方法
218
+ }
219
+ ```
220
+
221
+ ### ⚠️ Mapper XML 文件位置(重要差异)
222
+
223
+ **leniu-yunshitang-core 的 XML 文件与 Java Mapper 放在同一目录**,而非传统的 `resources/mapper/` 目录!
224
+
225
+ ```
226
+ src/main/java/net/xnzn/core/xxx/mapper/
227
+ ├── XxxMapper.java # Java 接口
228
+ └── XxxMapper.xml # XML 映射文件(同目录!)
229
+ ```
230
+
231
+ **对比 RuoYi-Vue-Plus:**
232
+ ```
233
+ # RuoYi-Vue-Plus 传统方式
234
+ src/main/java/.../mapper/XxxMapper.java
235
+ src/main/resources/mapper/XxxMapper.xml # XML 在 resources 目录
236
+ ```
237
+
238
+ **配置要求:**
239
+ 需要在 `pom.xml` 中配置资源过滤,让 Maven 将 Java 目录下的 XML 文件也打包:
240
+
241
+ ```xml
242
+ <build>
243
+ <resources>
244
+ <resource>
245
+ <directory>src/main/java</directory>
246
+ <includes>
247
+ <include>**/*.xml</include>
248
+ </includes>
249
+ </resource>
250
+ <resource>
251
+ <directory>src/main/resources</directory>
252
+ </resource>
253
+ </resources>
254
+ </build>
255
+ ```
256
+
257
+ **XML 文件示例:**
258
+ ```xml
259
+ <!-- XxxMapper.xml -->
260
+ <?xml version="1.0" encoding="UTF-8"?>
261
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
262
+ <mapper namespace="net.xnzn.core.xxx.mapper.XxxMapper">
263
+
264
+ <select id="page" resultType="net.xnzn.core.xxx.vo.XxxVO">
265
+ SELECT * FROM xxx_table
266
+ WHERE del_flag = 2
267
+ <if test="keyword != null and keyword != ''">
268
+ AND name LIKE CONCAT('%', #{keyword}, '%')
269
+ </if>
270
+ </select>
271
+
272
+ </mapper>
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Entity 设计规范
278
+
279
+ ### Entity 审计字段
280
+
281
+ ```java
282
+ package net.xnzn.core.xxx.model;
283
+
284
+ import com.baomidou.mybatisplus.annotation.*;
285
+ import lombok.Data;
286
+ import java.time.LocalDateTime;
287
+
288
+ @Data
289
+ @TableName("xxx_table")
290
+ public class XxxEntity {
291
+
292
+ // 主键(雪花ID或自增)
293
+ @TableId(value = "id", type = IdType.AUTO)
294
+ private Long id;
295
+
296
+ // 业务字段
297
+ private String name;
298
+ private Integer status;
299
+
300
+ // 审计字段
301
+ @TableField(fill = FieldFill.INSERT)
302
+ private String crby; // 创建人
303
+
304
+ @TableField(fill = FieldFill.INSERT)
305
+ private LocalDateTime crtime; // 创建时间
306
+
307
+ @TableField(fill = FieldFill.INSERT_UPDATE)
308
+ private String upby; // 更新人
309
+
310
+ @TableField(fill = FieldFill.INSERT_UPDATE)
311
+ private LocalDateTime uptime; // 更新时间
312
+
313
+ // 逻辑删除(注意:1=删除,2=正常,与 RuoYi 相反)
314
+ private Integer delFlag;
315
+ }
316
+ ```
317
+
318
+ ### 审计字段说明
319
+
320
+ | 字段 | 含义 | 自动填充 |
321
+ |------|------|---------|
322
+ | `crby` | 创建人 | INSERT |
323
+ | `crtime` | 创建时间 | INSERT |
324
+ | `upby` | 更新人 | INSERT_UPDATE |
325
+ | `uptime` | 更新时间 | INSERT_UPDATE |
326
+ | `delFlag` | 逻辑删除(1=删除,2=正常) | 手动设置 |
327
+
328
+ **注意:**
329
+ - `del_flag` 值与 RuoYi-Vue-Plus 相反!
330
+ - leniu:1=删除,2=正常
331
+ - RuoYi:0=正常,1=删除
332
+
333
+ ### DelFlagEnum 示例
334
+
335
+ ```java
336
+ public enum DelFlagEnum {
337
+ DEL_TRUE(1, "删除"),
338
+ DEL_FALSE(2, "正常");
339
+
340
+ private final Integer key;
341
+ private final String val;
342
+ }
343
+ ```
344
+
345
+ ---
346
+
347
+ ## 请求响应封装
348
+
349
+ ### LeRequest 请求封装
350
+
351
+ ```java
352
+ @Data
353
+ public class LeRequest<T> {
354
+ @NotNull(message = "请求内容不能为空")
355
+ private T content; // 实际请求数据
356
+ }
357
+
358
+ // 使用方式
359
+ @PostMapping("/add")
360
+ public void add(@RequestBody LeRequest<XxxDTO> request) {
361
+ XxxDTO dto = request.getContent(); // 获取实际数据
362
+ }
363
+ ```
364
+
365
+ ### PageDTO 分页参数
366
+
367
+ ```java
368
+ @Data
369
+ public class PageDTO {
370
+ @NotNull
371
+ @Min(1)
372
+ private Integer pageNum; // 当前页
373
+
374
+ @NotNull
375
+ @Min(1)
376
+ private Integer pageSize; // 每页条数
377
+
378
+ private String keyword; // 搜索关键词
379
+
380
+ // 转换为 MyBatis-Plus Page
381
+ public Page<Object> getMpPage() {
382
+ return new Page<>(pageNum, pageSize);
383
+ }
384
+ }
385
+ ```
386
+
387
+ ### 分页响应
388
+
389
+ ```java
390
+ // 直接返回 MyBatis-Plus Page
391
+ public Page<XxxVO> query(PageDTO dto) {
392
+ return xxxMapper.page(dto.getMpPage(), dto.getKeyword());
393
+ }
394
+ ```
395
+
396
+ ---
397
+
398
+ ## 异常处理
399
+
400
+ ### LeException 业务异常
401
+
402
+ ```java
403
+ import com.pig4cloud.pigx.common.core.exception.LeException;
404
+
405
+ // 抛出业务异常
406
+ throw new LeException("业务错误信息");
407
+
408
+ // 带国际化消息
409
+ import net.xnzn.framework.config.i18n.I18n;
410
+ throw new LeException(I18n.getMessage("error.key"));
411
+ ```
412
+
413
+ ---
414
+
415
+ ## 国际化
416
+
417
+ ### 消息文件配置
418
+
419
+ ```yaml
420
+ # bootstrap.yml
421
+ spring:
422
+ messages:
423
+ basename: "message_canteen_ext,message_common_ext,..."
424
+ ```
425
+
426
+ ### 使用方式
427
+
428
+ ```java
429
+ import net.xnzn.framework.config.i18n.I18n;
430
+
431
+ // 获取国际化消息
432
+ String message = I18n.getMessage("key");
433
+ throw new LeException(I18n.getMessage("error.key"));
434
+ ```
435
+
436
+ ---
437
+
438
+ ## 权限控制
439
+
440
+ ### @RequiresAuthentication 注解
441
+
442
+ ```java
443
+ import net.xnzn.framework.secure.filter.annotation.RequiresAuthentication;
444
+
445
+ @RestController
446
+ @RequiresAuthentication // 需要认证
447
+ @RequestMapping("/xxx")
448
+ public class XxxController {
449
+ }
450
+ ```
451
+
452
+ ---
453
+
454
+ ## 双库路由最佳实践
455
+
456
+ ### 场景1:商户业务(默认)
457
+
458
+ ```java
459
+ @PostMapping("/order/add")
460
+ public void addOrder(@RequestBody LeRequest<OrderDTO> request) {
461
+ // 前端请求头携带 MERCHANT-ID
462
+ // 自动路由到商户库,无需额外处理
463
+ orderService.add(request.getContent());
464
+ }
465
+ ```
466
+
467
+ ### 场景2:系统配置操作
468
+
469
+ ```java
470
+ @PostMapping("/merchant/config")
471
+ public void updateMerchantConfig(@RequestBody LeRequest<ConfigDTO> request) {
472
+ // 强制在系统库执行
473
+ Executors.doInSystem(() -> {
474
+ configService.update(request.getContent());
475
+ });
476
+ }
477
+ ```
478
+
479
+ ### 场景3:跨租户操作(定时任务)
480
+
481
+ ```java
482
+ @Component
483
+ public class DailyDataTask {
484
+
485
+ public void execute() {
486
+ // 遍历所有租户执行
487
+ Executors.doInAllTenant(tenantId -> {
488
+ dailyReportService.generateReport(tenantId);
489
+ });
490
+ }
491
+ }
492
+ ```
493
+
494
+ ### 场景4:消息消费指定租户
495
+
496
+ ```java
497
+ @RabbitListener(queues = "order.queue")
498
+ public void consumeOrder(Message message) {
499
+ Long tenantId = getTenantFromMessage(message);
500
+ // 在指定租户库执行
501
+ Executors.doInTenant(tenantId, () -> {
502
+ orderService.process(message);
503
+ });
504
+ }
505
+ ```
506
+
507
+ ---
508
+
509
+ ## 常见设计规范
510
+
511
+ ### 模块包结构
512
+
513
+ ```
514
+ net.xnzn.core.xxx/
515
+ ├── controller/ # 控制器
516
+ ├── service/
517
+ │ └── impl/ # 服务实现(不要求接口)
518
+ ├── mapper/ # MyBatis Mapper
519
+ ├── model/ # 实体类
520
+ ├── dto/ # 数据传输对象
521
+ ├── vo/ # 视图对象
522
+ └── util/ # 工具类
523
+ ```
524
+
525
+ ### 命名规范
526
+
527
+ | 类型 | 命名规则 | 示例 |
528
+ |------|---------|------|
529
+ | Controller | `XxxResourceController` | `OrderResourceController` |
530
+ | Service | `XxxService` / `XxxServiceImpl` | `OrderService` |
531
+ | Mapper | `XxxMapper` | `OrderMapper` |
532
+ | Entity | `XxxEntity` | `OrderEntity` |
533
+ | DTO | `XxxDTO` | `OrderDTO` |
534
+ | VO | `XxxVO` | `OrderVO` |
535
+
536
+ ### ID 生成
537
+
538
+ ```java
539
+ import net.xnzn.framework.id.Id;
540
+
541
+ // 生成雪花ID
542
+ long id = Id.next();
543
+ ```
544
+
545
+ ---
546
+
547
+ ## 与 RuoYi-Vue-Plus 对比
548
+
549
+ | 特征 | RuoYi-Vue-Plus | leniu-tengyun-core |
550
+ |------|----------------|-------------------|
551
+ | **包名** | `org.dromara.*` | `net.xnzn.*` |
552
+ | **JDK** | 17 | 21 |
553
+ | **租户模式** | 单库多租户(tenant_id 字段) | 双库架构(物理库隔离) |
554
+ | **请求封装** | `Bo` | `LeRequest<T>` |
555
+ | **响应封装** | `R<T>`, `TableDataInfo<T>` | `Page<T>`, `void` |
556
+ | **异常类** | `ServiceException` | `LeException` |
557
+ | **国际化** | `MessageUtils.message()` | `I18n.getMessage()` |
558
+ | **权限注解** | `@SaCheckPermission` | `@RequiresAuthentication` |
559
+ | **审计字段** | `create_by/create_time/update_by/update_time` | `crby/crtime/upby/uptime` |
560
+ | **逻辑删除** | `del_flag` (0=正常, 1=删除) | `del_flag` (2=正常, 1=删除) |
561
+
562
+ ---
563
+
564
+ ## 快速检查清单
565
+
566
+ ### 新模块设计检查
567
+
568
+ - [ ] **包路径正确**:`net.xnzn.xxx.*`
569
+ - [ ] **Entity 审计字段**:`crby/crtime/upby/uptime`
570
+ - [ ] **逻辑删除**:`delFlag`(1=删除,2=正常)
571
+ - [ ] **三层架构**:Controller → Service → Mapper
572
+ - [ ] **异常处理**:使用 `LeException`
573
+ - [ ] **权限控制**:`@RequiresAuthentication`
574
+ - [ ] **国际化**:使用 `I18n.getMessage()`
575
+ - [ ] **双库路由**:根据需要使用 `Executors.doInTenant/doInSystem`
576
+
577
+ ### Entity 检查
578
+
579
+ - [ ] 主键配置:`@TableId(value = "id", type = IdType.AUTO)`
580
+ - [ ] 表名注解:`@TableName("table_name")`
581
+ - [ ] 审计字段自动填充:`@TableField(fill = FieldFill.INSERT/INSERT_UPDATE)`
582
+ - [ ] Lombok 注解:`@Data @Accessors(chain = true)`
583
+
584
+ ---
585
+
586
+ ## 参考代码位置
587
+
588
+ | 类型 | 路径 |
589
+ |------|------|
590
+ | Controller 示例 | `sys-kitchen/.../backfield/attendance/scheduling/controller/BackAttendanceWorkShiftController.java` |
591
+ | Service 示例 | `sys-kitchen/.../backfield/attendance/scheduling/service/impl/BackAttendanceWorkShiftServiceImpl.java` |
592
+ | Mapper 示例 | `sys-kitchen/.../backfield/attendance/scheduling/mapper/BackAttendanceWorkShiftMapper.java` |
593
+ | Entity 示例 | `sys-kitchen/.../backfield/attendance/scheduling/model/BackAttendanceWorkShift.java` |
594
+ | 配置文件 | `core-base/src/main/resources/bootstrap.yml` |