@mytechtoday/augment-extensions 0.7.0 → 1.2.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 (483) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +109 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +11 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +120 -0
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  476. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  477. package/cli/dist/utils/extractCommandHelp.js +250 -0
  478. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  479. package/cli/dist/utils/install-rules.js +55 -55
  480. package/cli/dist/utils/mcp-integration.js +44 -44
  481. package/cli/dist/utils/rule-install-hooks.js +8 -8
  482. package/modules.md +667 -630
  483. package/package.json +85 -85
@@ -1,498 +1,498 @@
1
- # Migration Example: Adding Wishlist Feature
2
-
3
- ## Scenario
4
-
5
- Add a wishlist feature to the e-commerce platform (from schema-design-example.md) that allows users to save products for later.
6
-
7
- **Requirements**:
8
- - Users can add/remove products to their wishlist
9
- - Track when products were added to wishlist
10
- - Support multiple wishlists per user (e.g., "Birthday", "Holiday")
11
- - Zero downtime migration
12
- - Backward compatible with existing code
13
-
14
- **Constraints**:
15
- - Production database has 100,000 users
16
- - Cannot take downtime
17
- - Existing application code must continue working during migration
18
-
19
- ---
20
-
21
- ## Step 1: Plan the Migration
22
-
23
- ### Schema Changes
24
-
25
- **New Tables**:
26
- 1. `wishlists` - User wishlists with names
27
- 2. `wishlist_items` - Products in each wishlist
28
-
29
- **Relationships**:
30
- - `wishlists.user_id` → `users.id` (many-to-one)
31
- - `wishlist_items.wishlist_id` → `wishlists.id` (many-to-one)
32
- - `wishlist_items.product_id` → `products.id` (many-to-one)
33
-
34
- ### Migration Strategy
35
-
36
- **Approach**: Single-phase migration (low risk, no schema changes to existing tables)
37
-
38
- **Why Single-Phase**:
39
- - Adding new tables only (no changes to existing tables)
40
- - No data migration needed
41
- - No backward compatibility concerns
42
- - Can deploy code and schema together
43
-
44
- **Timeline**:
45
- 1. Create migration scripts (30 minutes)
46
- 2. Test on staging (1 hour)
47
- 3. Execute on production (< 1 minute)
48
- 4. Deploy application code (5 minutes)
49
- 5. Monitor (24 hours)
50
-
51
- ---
52
-
53
- ## Step 2: Create Migration Scripts
54
-
55
- ### Up Migration
56
-
57
- **File**: `migrations/20240128_add_wishlist_feature.sql`
58
-
59
- ```sql
60
- -- Migration: Add wishlist feature
61
- -- Date: 2024-01-28
62
- -- Author: AI Agent
63
- -- Issue: bd-wishlist.1
64
- --
65
- -- Purpose: Add wishlist functionality for users to save products
66
- --
67
- -- Breaking Changes: None (new tables only)
68
- --
69
- -- Rollback: Safe to rollback; tables will be dropped
70
- --
71
- -- Estimated Execution Time: < 5 seconds
72
- --
73
- -- Dependencies: None
74
-
75
- BEGIN;
76
-
77
- -- Create wishlists table
78
- CREATE TABLE wishlists (
79
- id SERIAL PRIMARY KEY,
80
- user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
81
- name VARCHAR(100) NOT NULL DEFAULT 'My Wishlist',
82
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
83
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
84
-
85
- CONSTRAINT unique_user_wishlist_name UNIQUE (user_id, name)
86
- );
87
-
88
- -- Indexes for wishlists
89
- CREATE INDEX idx_wishlists_user ON wishlists(user_id);
90
-
91
- -- Comments
92
- COMMENT ON TABLE wishlists IS 'User wishlists for saving products';
93
- COMMENT ON COLUMN wishlists.name IS 'User-defined wishlist name (e.g., "Birthday", "Holiday")';
94
- COMMENT ON CONSTRAINT unique_user_wishlist_name ON wishlists IS 'Prevent duplicate wishlist names per user';
95
-
96
- -- Create wishlist_items table
97
- CREATE TABLE wishlist_items (
98
- id SERIAL PRIMARY KEY,
99
- wishlist_id INTEGER NOT NULL REFERENCES wishlists(id) ON DELETE CASCADE,
100
- product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE,
101
- added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
102
- notes TEXT,
103
-
104
- CONSTRAINT unique_wishlist_product UNIQUE (wishlist_id, product_id)
105
- );
106
-
107
- -- Indexes for wishlist_items
108
- CREATE INDEX idx_wishlist_items_wishlist ON wishlist_items(wishlist_id, added_at DESC);
109
- CREATE INDEX idx_wishlist_items_product ON wishlist_items(product_id);
110
-
111
- -- Comments
112
- COMMENT ON TABLE wishlist_items IS 'Products saved in user wishlists';
113
- COMMENT ON COLUMN wishlist_items.notes IS 'Optional user notes about the product';
114
- COMMENT ON CONSTRAINT unique_wishlist_product ON wishlist_items IS 'Prevent duplicate products in same wishlist';
115
-
116
- -- Create function to update wishlist updated_at timestamp
117
- CREATE OR REPLACE FUNCTION update_wishlist_timestamp()
118
- RETURNS TRIGGER AS $$
119
- BEGIN
120
- UPDATE wishlists SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.wishlist_id;
121
- RETURN NEW;
122
- END;
123
- $$ LANGUAGE plpgsql;
124
-
125
- -- Create trigger to update wishlist timestamp when items are added/removed
126
- CREATE TRIGGER trigger_update_wishlist_timestamp
127
- AFTER INSERT OR UPDATE OR DELETE ON wishlist_items
128
- FOR EACH ROW EXECUTE FUNCTION update_wishlist_timestamp();
129
-
130
- COMMIT;
131
- ```
132
-
133
- ### Down Migration (Rollback)
134
-
135
- **File**: `migrations/20240128_add_wishlist_feature_down.sql`
136
-
137
- ```sql
138
- -- Rollback: Remove wishlist feature
139
- -- Date: 2024-01-28
140
-
141
- BEGIN;
142
-
143
- -- Drop trigger and function
144
- DROP TRIGGER IF EXISTS trigger_update_wishlist_timestamp ON wishlist_items;
145
- DROP FUNCTION IF EXISTS update_wishlist_timestamp();
146
-
147
- -- Drop tables (cascade will remove foreign key constraints)
148
- DROP TABLE IF EXISTS wishlist_items CASCADE;
149
- DROP TABLE IF EXISTS wishlists CASCADE;
150
-
151
- COMMIT;
152
- ```
153
-
154
- ---
155
-
156
- ## Step 3: Test the Migration
157
-
158
- ### Test on Local Development
159
-
160
- ```bash
161
- # Apply migration
162
- psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature.sql
163
-
164
- # Verify tables created
165
- psql -U postgres -d ecommerce_dev -c "\d wishlists"
166
- psql -U postgres -d ecommerce_dev -c "\d wishlist_items"
167
-
168
- # Test rollback
169
- psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature_down.sql
170
-
171
- # Verify tables dropped
172
- psql -U postgres -d ecommerce_dev -c "\d wishlists"
173
- ```
174
-
175
- ### Test on Staging with Production-Like Data
176
-
177
- ```bash
178
- # Restore production snapshot to staging
179
- pg_restore -U postgres -d ecommerce_staging production_snapshot.dump
180
-
181
- # Apply migration
182
- psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature.sql
183
-
184
- # Verify migration success
185
- psql -U postgres -d ecommerce_staging -c "
186
- SELECT
187
- table_name,
188
- (SELECT COUNT(*) FROM information_schema.columns WHERE table_name = t.table_name) as column_count
189
- FROM information_schema.tables t
190
- WHERE table_name IN ('wishlists', 'wishlist_items');
191
- "
192
-
193
- # Test sample data insertion
194
- psql -U postgres -d ecommerce_staging -c "
195
- INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist');
196
- INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
197
- SELECT * FROM wishlists;
198
- SELECT * FROM wishlist_items;
199
- "
200
-
201
- # Test rollback
202
- psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature_down.sql
203
- ```
204
-
205
- ### Testing Checklist
206
-
207
- - [x] Migration runs without errors
208
- - [x] Tables created with correct schema
209
- - [x] Indexes created successfully
210
- - [x] Foreign key constraints work correctly
211
- - [x] Unique constraints prevent duplicates
212
- - [x] Trigger updates wishlist timestamp
213
- - [x] Rollback script works correctly
214
- - [x] No impact on existing tables
215
- - [x] Execution time < 5 seconds
216
-
217
- ---
218
-
219
- ## Step 4: Execute on Production
220
-
221
- ### Pre-Migration Checklist
222
-
223
- - [x] Backup database (snapshot created)
224
- - [x] Rollback script tested on staging
225
- - [x] Migration tested on production-like data
226
- - [x] Stakeholders notified
227
- - [x] Monitoring dashboards prepared
228
- - [x] Execution window scheduled (low-traffic period)
229
-
230
- ### Execution Steps
231
-
232
- ```bash
233
- # 1. Create database backup
234
- pg_dump -U postgres -d ecommerce_prod -F c -f backup_before_wishlist_$(date +%Y%m%d_%H%M%S).dump
235
-
236
- # 2. Verify backup
237
- ls -lh backup_before_wishlist_*.dump
238
-
239
- # 3. Start monitoring
240
- # - Open database metrics dashboard
241
- # - Open application error logs
242
- # - Open APM dashboard
243
-
244
- # 4. Execute migration
245
- psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature.sql
246
-
247
- # 5. Verify migration success
248
- psql -U postgres -d ecommerce_prod -c "
249
- SELECT
250
- schemaname,
251
- tablename,
252
- pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
253
- FROM pg_tables
254
- WHERE tablename IN ('wishlists', 'wishlist_items');
255
- "
256
-
257
- # 6. Verify indexes created
258
- psql -U postgres -d ecommerce_prod -c "
259
- SELECT indexname, indexdef
260
- FROM pg_indexes
261
- WHERE tablename IN ('wishlists', 'wishlist_items');
262
- "
263
-
264
- # 7. Test basic operations
265
- psql -U postgres -d ecommerce_prod -c "
266
- -- Create test wishlist
267
- INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist') RETURNING id;
268
-
269
- -- Add item to wishlist
270
- INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
271
-
272
- -- Verify trigger updated timestamp
273
- SELECT id, name, created_at, updated_at FROM wishlists WHERE id = 1;
274
-
275
- -- Clean up test data
276
- DELETE FROM wishlists WHERE id = 1;
277
- "
278
- ```
279
-
280
- ### Post-Migration Verification
281
-
282
- ```sql
283
- -- Verify table structure
284
- \d wishlists
285
- \d wishlist_items
286
-
287
- -- Verify constraints
288
- SELECT conname, contype, pg_get_constraintdef(oid)
289
- FROM pg_constraint
290
- WHERE conrelid IN ('wishlists'::regclass, 'wishlist_items'::regclass);
291
-
292
- -- Verify indexes
293
- SELECT indexname, indexdef
294
- FROM pg_indexes
295
- WHERE tablename IN ('wishlists', 'wishlist_items');
296
-
297
- -- Verify trigger
298
- SELECT tgname, tgtype, tgenabled
299
- FROM pg_trigger
300
- WHERE tgrelid = 'wishlist_items'::regclass;
301
- ```
302
-
303
- ---
304
-
305
- ## Step 5: Deploy Application Code
306
-
307
- ### API Endpoints to Add
308
-
309
- ```javascript
310
- // POST /api/wishlists - Create wishlist
311
- app.post('/api/wishlists', async (req, res) => {
312
- const { userId, name } = req.body;
313
-
314
- const result = await db.query(
315
- 'INSERT INTO wishlists (user_id, name) VALUES ($1, $2) RETURNING *',
316
- [userId, name]
317
- );
318
-
319
- res.json(result.rows[0]);
320
- });
321
-
322
- // GET /api/wishlists/:userId - Get user's wishlists
323
- app.get('/api/wishlists/:userId', async (req, res) => {
324
- const { userId } = req.params;
325
-
326
- const result = await db.query(
327
- `SELECT w.*, COUNT(wi.id) as item_count
328
- FROM wishlists w
329
- LEFT JOIN wishlist_items wi ON w.id = wi.wishlist_id
330
- WHERE w.user_id = $1
331
- GROUP BY w.id
332
- ORDER BY w.updated_at DESC`,
333
- [userId]
334
- );
335
-
336
- res.json(result.rows);
337
- });
338
-
339
- // POST /api/wishlists/:wishlistId/items - Add item to wishlist
340
- app.post('/api/wishlists/:wishlistId/items', async (req, res) => {
341
- const { wishlistId } = req.params;
342
- const { productId, notes } = req.body;
343
-
344
- try {
345
- const result = await db.query(
346
- 'INSERT INTO wishlist_items (wishlist_id, product_id, notes) VALUES ($1, $2, $3) RETURNING *',
347
- [wishlistId, productId, notes]
348
- );
349
-
350
- res.json(result.rows[0]);
351
- } catch (error) {
352
- if (error.code === '23505') { // Unique constraint violation
353
- res.status(409).json({ error: 'Product already in wishlist' });
354
- } else {
355
- throw error;
356
- }
357
- }
358
- });
359
-
360
- // GET /api/wishlists/:wishlistId/items - Get wishlist items
361
- app.get('/api/wishlists/:wishlistId/items', async (req, res) => {
362
- const { wishlistId } = req.params;
363
-
364
- const result = await db.query(
365
- `SELECT
366
- wi.*,
367
- p.name as product_name,
368
- p.price,
369
- p.inventory_count,
370
- (SELECT url FROM product_images WHERE product_id = p.id ORDER BY display_order LIMIT 1) as thumbnail
371
- FROM wishlist_items wi
372
- JOIN products p ON wi.product_id = p.id
373
- WHERE wi.wishlist_id = $1
374
- ORDER BY wi.added_at DESC`,
375
- [wishlistId]
376
- );
377
-
378
- res.json(result.rows);
379
- });
380
-
381
- // DELETE /api/wishlists/:wishlistId/items/:productId - Remove item from wishlist
382
- app.delete('/api/wishlists/:wishlistId/items/:productId', async (req, res) => {
383
- const { wishlistId, productId } = req.params;
384
-
385
- await db.query(
386
- 'DELETE FROM wishlist_items WHERE wishlist_id = $1 AND product_id = $2',
387
- [wishlistId, productId]
388
- );
389
-
390
- res.json({ success: true });
391
- });
392
- ```
393
-
394
- ---
395
-
396
- ## Step 6: Monitor and Validate
397
-
398
- ### Monitoring Metrics
399
-
400
- **Database Metrics** (first 24 hours):
401
- - Table sizes: `wishlists` and `wishlist_items`
402
- - Index usage: Verify indexes are being used
403
- - Query performance: Monitor wishlist query times
404
- - Lock contention: Check for blocking queries
405
-
406
- **Application Metrics**:
407
- - API endpoint response times
408
- - Error rates for wishlist operations
409
- - User adoption (wishlists created, items added)
410
-
411
- ### Validation Queries
412
-
413
- ```sql
414
- -- Check wishlist growth
415
- SELECT
416
- DATE(created_at) as date,
417
- COUNT(*) as wishlists_created
418
- FROM wishlists
419
- GROUP BY DATE(created_at)
420
- ORDER BY date DESC
421
- LIMIT 7;
422
-
423
- -- Check wishlist item growth
424
- SELECT
425
- DATE(added_at) as date,
426
- COUNT(*) as items_added
427
- FROM wishlist_items
428
- GROUP BY DATE(added_at)
429
- ORDER BY date DESC
430
- LIMIT 7;
431
-
432
- -- Check most popular wishlist names
433
- SELECT name, COUNT(*) as count
434
- FROM wishlists
435
- GROUP BY name
436
- ORDER BY count DESC
437
- LIMIT 10;
438
-
439
- -- Check index usage
440
- SELECT
441
- schemaname,
442
- tablename,
443
- indexname,
444
- idx_scan as index_scans,
445
- idx_tup_read as tuples_read
446
- FROM pg_stat_user_indexes
447
- WHERE tablename IN ('wishlists', 'wishlist_items')
448
- ORDER BY idx_scan DESC;
449
- ```
450
-
451
- ---
452
-
453
- ## Rollback Plan (If Needed)
454
-
455
- ### When to Rollback
456
-
457
- - Migration fails during execution
458
- - Data integrity issues discovered
459
- - Performance degradation detected
460
- - Critical bugs in application code
461
-
462
- ### Rollback Steps
463
-
464
- ```bash
465
- # 1. Stop application deployments
466
- # 2. Execute rollback script
467
- psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature_down.sql
468
-
469
- # 3. Verify tables dropped
470
- psql -U postgres -d ecommerce_prod -c "\d wishlists"
471
-
472
- # 4. Restore from backup (if needed)
473
- pg_restore -U postgres -d ecommerce_prod backup_before_wishlist_*.dump
474
-
475
- # 5. Verify database state
476
- # 6. Notify stakeholders
477
- ```
478
-
479
- ---
480
-
481
- ## Key Takeaways
482
-
483
- 1. **Low-Risk Migration**: Adding new tables is safer than modifying existing ones
484
- 2. **No Downtime**: Migration completed in < 5 seconds with no service interruption
485
- 3. **Backward Compatible**: Existing code continued working during migration
486
- 4. **Tested Thoroughly**: Tested on local, staging, and production-like data
487
- 5. **Monitored Closely**: Tracked metrics for 24 hours after deployment
488
- 6. **Rollback Ready**: Tested rollback script before production execution
489
-
490
- ---
491
-
492
- ## Next Steps
493
-
494
- - See `optimization-example.md` for optimizing wishlist queries
495
- - See `../rules/testing-patterns.md` for testing wishlist functionality
496
- - See `../rules/documentation-standards.md` for documenting the migration
497
-
498
-
1
+ # Migration Example: Adding Wishlist Feature
2
+
3
+ ## Scenario
4
+
5
+ Add a wishlist feature to the e-commerce platform (from schema-design-example.md) that allows users to save products for later.
6
+
7
+ **Requirements**:
8
+ - Users can add/remove products to their wishlist
9
+ - Track when products were added to wishlist
10
+ - Support multiple wishlists per user (e.g., "Birthday", "Holiday")
11
+ - Zero downtime migration
12
+ - Backward compatible with existing code
13
+
14
+ **Constraints**:
15
+ - Production database has 100,000 users
16
+ - Cannot take downtime
17
+ - Existing application code must continue working during migration
18
+
19
+ ---
20
+
21
+ ## Step 1: Plan the Migration
22
+
23
+ ### Schema Changes
24
+
25
+ **New Tables**:
26
+ 1. `wishlists` - User wishlists with names
27
+ 2. `wishlist_items` - Products in each wishlist
28
+
29
+ **Relationships**:
30
+ - `wishlists.user_id` → `users.id` (many-to-one)
31
+ - `wishlist_items.wishlist_id` → `wishlists.id` (many-to-one)
32
+ - `wishlist_items.product_id` → `products.id` (many-to-one)
33
+
34
+ ### Migration Strategy
35
+
36
+ **Approach**: Single-phase migration (low risk, no schema changes to existing tables)
37
+
38
+ **Why Single-Phase**:
39
+ - Adding new tables only (no changes to existing tables)
40
+ - No data migration needed
41
+ - No backward compatibility concerns
42
+ - Can deploy code and schema together
43
+
44
+ **Timeline**:
45
+ 1. Create migration scripts (30 minutes)
46
+ 2. Test on staging (1 hour)
47
+ 3. Execute on production (< 1 minute)
48
+ 4. Deploy application code (5 minutes)
49
+ 5. Monitor (24 hours)
50
+
51
+ ---
52
+
53
+ ## Step 2: Create Migration Scripts
54
+
55
+ ### Up Migration
56
+
57
+ **File**: `migrations/20240128_add_wishlist_feature.sql`
58
+
59
+ ```sql
60
+ -- Migration: Add wishlist feature
61
+ -- Date: 2024-01-28
62
+ -- Author: AI Agent
63
+ -- Issue: bd-wishlist.1
64
+ --
65
+ -- Purpose: Add wishlist functionality for users to save products
66
+ --
67
+ -- Breaking Changes: None (new tables only)
68
+ --
69
+ -- Rollback: Safe to rollback; tables will be dropped
70
+ --
71
+ -- Estimated Execution Time: < 5 seconds
72
+ --
73
+ -- Dependencies: None
74
+
75
+ BEGIN;
76
+
77
+ -- Create wishlists table
78
+ CREATE TABLE wishlists (
79
+ id SERIAL PRIMARY KEY,
80
+ user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
81
+ name VARCHAR(100) NOT NULL DEFAULT 'My Wishlist',
82
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
83
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
84
+
85
+ CONSTRAINT unique_user_wishlist_name UNIQUE (user_id, name)
86
+ );
87
+
88
+ -- Indexes for wishlists
89
+ CREATE INDEX idx_wishlists_user ON wishlists(user_id);
90
+
91
+ -- Comments
92
+ COMMENT ON TABLE wishlists IS 'User wishlists for saving products';
93
+ COMMENT ON COLUMN wishlists.name IS 'User-defined wishlist name (e.g., "Birthday", "Holiday")';
94
+ COMMENT ON CONSTRAINT unique_user_wishlist_name ON wishlists IS 'Prevent duplicate wishlist names per user';
95
+
96
+ -- Create wishlist_items table
97
+ CREATE TABLE wishlist_items (
98
+ id SERIAL PRIMARY KEY,
99
+ wishlist_id INTEGER NOT NULL REFERENCES wishlists(id) ON DELETE CASCADE,
100
+ product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE,
101
+ added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
102
+ notes TEXT,
103
+
104
+ CONSTRAINT unique_wishlist_product UNIQUE (wishlist_id, product_id)
105
+ );
106
+
107
+ -- Indexes for wishlist_items
108
+ CREATE INDEX idx_wishlist_items_wishlist ON wishlist_items(wishlist_id, added_at DESC);
109
+ CREATE INDEX idx_wishlist_items_product ON wishlist_items(product_id);
110
+
111
+ -- Comments
112
+ COMMENT ON TABLE wishlist_items IS 'Products saved in user wishlists';
113
+ COMMENT ON COLUMN wishlist_items.notes IS 'Optional user notes about the product';
114
+ COMMENT ON CONSTRAINT unique_wishlist_product ON wishlist_items IS 'Prevent duplicate products in same wishlist';
115
+
116
+ -- Create function to update wishlist updated_at timestamp
117
+ CREATE OR REPLACE FUNCTION update_wishlist_timestamp()
118
+ RETURNS TRIGGER AS $$
119
+ BEGIN
120
+ UPDATE wishlists SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.wishlist_id;
121
+ RETURN NEW;
122
+ END;
123
+ $$ LANGUAGE plpgsql;
124
+
125
+ -- Create trigger to update wishlist timestamp when items are added/removed
126
+ CREATE TRIGGER trigger_update_wishlist_timestamp
127
+ AFTER INSERT OR UPDATE OR DELETE ON wishlist_items
128
+ FOR EACH ROW EXECUTE FUNCTION update_wishlist_timestamp();
129
+
130
+ COMMIT;
131
+ ```
132
+
133
+ ### Down Migration (Rollback)
134
+
135
+ **File**: `migrations/20240128_add_wishlist_feature_down.sql`
136
+
137
+ ```sql
138
+ -- Rollback: Remove wishlist feature
139
+ -- Date: 2024-01-28
140
+
141
+ BEGIN;
142
+
143
+ -- Drop trigger and function
144
+ DROP TRIGGER IF EXISTS trigger_update_wishlist_timestamp ON wishlist_items;
145
+ DROP FUNCTION IF EXISTS update_wishlist_timestamp();
146
+
147
+ -- Drop tables (cascade will remove foreign key constraints)
148
+ DROP TABLE IF EXISTS wishlist_items CASCADE;
149
+ DROP TABLE IF EXISTS wishlists CASCADE;
150
+
151
+ COMMIT;
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Step 3: Test the Migration
157
+
158
+ ### Test on Local Development
159
+
160
+ ```bash
161
+ # Apply migration
162
+ psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature.sql
163
+
164
+ # Verify tables created
165
+ psql -U postgres -d ecommerce_dev -c "\d wishlists"
166
+ psql -U postgres -d ecommerce_dev -c "\d wishlist_items"
167
+
168
+ # Test rollback
169
+ psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature_down.sql
170
+
171
+ # Verify tables dropped
172
+ psql -U postgres -d ecommerce_dev -c "\d wishlists"
173
+ ```
174
+
175
+ ### Test on Staging with Production-Like Data
176
+
177
+ ```bash
178
+ # Restore production snapshot to staging
179
+ pg_restore -U postgres -d ecommerce_staging production_snapshot.dump
180
+
181
+ # Apply migration
182
+ psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature.sql
183
+
184
+ # Verify migration success
185
+ psql -U postgres -d ecommerce_staging -c "
186
+ SELECT
187
+ table_name,
188
+ (SELECT COUNT(*) FROM information_schema.columns WHERE table_name = t.table_name) as column_count
189
+ FROM information_schema.tables t
190
+ WHERE table_name IN ('wishlists', 'wishlist_items');
191
+ "
192
+
193
+ # Test sample data insertion
194
+ psql -U postgres -d ecommerce_staging -c "
195
+ INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist');
196
+ INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
197
+ SELECT * FROM wishlists;
198
+ SELECT * FROM wishlist_items;
199
+ "
200
+
201
+ # Test rollback
202
+ psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature_down.sql
203
+ ```
204
+
205
+ ### Testing Checklist
206
+
207
+ - [x] Migration runs without errors
208
+ - [x] Tables created with correct schema
209
+ - [x] Indexes created successfully
210
+ - [x] Foreign key constraints work correctly
211
+ - [x] Unique constraints prevent duplicates
212
+ - [x] Trigger updates wishlist timestamp
213
+ - [x] Rollback script works correctly
214
+ - [x] No impact on existing tables
215
+ - [x] Execution time < 5 seconds
216
+
217
+ ---
218
+
219
+ ## Step 4: Execute on Production
220
+
221
+ ### Pre-Migration Checklist
222
+
223
+ - [x] Backup database (snapshot created)
224
+ - [x] Rollback script tested on staging
225
+ - [x] Migration tested on production-like data
226
+ - [x] Stakeholders notified
227
+ - [x] Monitoring dashboards prepared
228
+ - [x] Execution window scheduled (low-traffic period)
229
+
230
+ ### Execution Steps
231
+
232
+ ```bash
233
+ # 1. Create database backup
234
+ pg_dump -U postgres -d ecommerce_prod -F c -f backup_before_wishlist_$(date +%Y%m%d_%H%M%S).dump
235
+
236
+ # 2. Verify backup
237
+ ls -lh backup_before_wishlist_*.dump
238
+
239
+ # 3. Start monitoring
240
+ # - Open database metrics dashboard
241
+ # - Open application error logs
242
+ # - Open APM dashboard
243
+
244
+ # 4. Execute migration
245
+ psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature.sql
246
+
247
+ # 5. Verify migration success
248
+ psql -U postgres -d ecommerce_prod -c "
249
+ SELECT
250
+ schemaname,
251
+ tablename,
252
+ pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
253
+ FROM pg_tables
254
+ WHERE tablename IN ('wishlists', 'wishlist_items');
255
+ "
256
+
257
+ # 6. Verify indexes created
258
+ psql -U postgres -d ecommerce_prod -c "
259
+ SELECT indexname, indexdef
260
+ FROM pg_indexes
261
+ WHERE tablename IN ('wishlists', 'wishlist_items');
262
+ "
263
+
264
+ # 7. Test basic operations
265
+ psql -U postgres -d ecommerce_prod -c "
266
+ -- Create test wishlist
267
+ INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist') RETURNING id;
268
+
269
+ -- Add item to wishlist
270
+ INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
271
+
272
+ -- Verify trigger updated timestamp
273
+ SELECT id, name, created_at, updated_at FROM wishlists WHERE id = 1;
274
+
275
+ -- Clean up test data
276
+ DELETE FROM wishlists WHERE id = 1;
277
+ "
278
+ ```
279
+
280
+ ### Post-Migration Verification
281
+
282
+ ```sql
283
+ -- Verify table structure
284
+ \d wishlists
285
+ \d wishlist_items
286
+
287
+ -- Verify constraints
288
+ SELECT conname, contype, pg_get_constraintdef(oid)
289
+ FROM pg_constraint
290
+ WHERE conrelid IN ('wishlists'::regclass, 'wishlist_items'::regclass);
291
+
292
+ -- Verify indexes
293
+ SELECT indexname, indexdef
294
+ FROM pg_indexes
295
+ WHERE tablename IN ('wishlists', 'wishlist_items');
296
+
297
+ -- Verify trigger
298
+ SELECT tgname, tgtype, tgenabled
299
+ FROM pg_trigger
300
+ WHERE tgrelid = 'wishlist_items'::regclass;
301
+ ```
302
+
303
+ ---
304
+
305
+ ## Step 5: Deploy Application Code
306
+
307
+ ### API Endpoints to Add
308
+
309
+ ```javascript
310
+ // POST /api/wishlists - Create wishlist
311
+ app.post('/api/wishlists', async (req, res) => {
312
+ const { userId, name } = req.body;
313
+
314
+ const result = await db.query(
315
+ 'INSERT INTO wishlists (user_id, name) VALUES ($1, $2) RETURNING *',
316
+ [userId, name]
317
+ );
318
+
319
+ res.json(result.rows[0]);
320
+ });
321
+
322
+ // GET /api/wishlists/:userId - Get user's wishlists
323
+ app.get('/api/wishlists/:userId', async (req, res) => {
324
+ const { userId } = req.params;
325
+
326
+ const result = await db.query(
327
+ `SELECT w.*, COUNT(wi.id) as item_count
328
+ FROM wishlists w
329
+ LEFT JOIN wishlist_items wi ON w.id = wi.wishlist_id
330
+ WHERE w.user_id = $1
331
+ GROUP BY w.id
332
+ ORDER BY w.updated_at DESC`,
333
+ [userId]
334
+ );
335
+
336
+ res.json(result.rows);
337
+ });
338
+
339
+ // POST /api/wishlists/:wishlistId/items - Add item to wishlist
340
+ app.post('/api/wishlists/:wishlistId/items', async (req, res) => {
341
+ const { wishlistId } = req.params;
342
+ const { productId, notes } = req.body;
343
+
344
+ try {
345
+ const result = await db.query(
346
+ 'INSERT INTO wishlist_items (wishlist_id, product_id, notes) VALUES ($1, $2, $3) RETURNING *',
347
+ [wishlistId, productId, notes]
348
+ );
349
+
350
+ res.json(result.rows[0]);
351
+ } catch (error) {
352
+ if (error.code === '23505') { // Unique constraint violation
353
+ res.status(409).json({ error: 'Product already in wishlist' });
354
+ } else {
355
+ throw error;
356
+ }
357
+ }
358
+ });
359
+
360
+ // GET /api/wishlists/:wishlistId/items - Get wishlist items
361
+ app.get('/api/wishlists/:wishlistId/items', async (req, res) => {
362
+ const { wishlistId } = req.params;
363
+
364
+ const result = await db.query(
365
+ `SELECT
366
+ wi.*,
367
+ p.name as product_name,
368
+ p.price,
369
+ p.inventory_count,
370
+ (SELECT url FROM product_images WHERE product_id = p.id ORDER BY display_order LIMIT 1) as thumbnail
371
+ FROM wishlist_items wi
372
+ JOIN products p ON wi.product_id = p.id
373
+ WHERE wi.wishlist_id = $1
374
+ ORDER BY wi.added_at DESC`,
375
+ [wishlistId]
376
+ );
377
+
378
+ res.json(result.rows);
379
+ });
380
+
381
+ // DELETE /api/wishlists/:wishlistId/items/:productId - Remove item from wishlist
382
+ app.delete('/api/wishlists/:wishlistId/items/:productId', async (req, res) => {
383
+ const { wishlistId, productId } = req.params;
384
+
385
+ await db.query(
386
+ 'DELETE FROM wishlist_items WHERE wishlist_id = $1 AND product_id = $2',
387
+ [wishlistId, productId]
388
+ );
389
+
390
+ res.json({ success: true });
391
+ });
392
+ ```
393
+
394
+ ---
395
+
396
+ ## Step 6: Monitor and Validate
397
+
398
+ ### Monitoring Metrics
399
+
400
+ **Database Metrics** (first 24 hours):
401
+ - Table sizes: `wishlists` and `wishlist_items`
402
+ - Index usage: Verify indexes are being used
403
+ - Query performance: Monitor wishlist query times
404
+ - Lock contention: Check for blocking queries
405
+
406
+ **Application Metrics**:
407
+ - API endpoint response times
408
+ - Error rates for wishlist operations
409
+ - User adoption (wishlists created, items added)
410
+
411
+ ### Validation Queries
412
+
413
+ ```sql
414
+ -- Check wishlist growth
415
+ SELECT
416
+ DATE(created_at) as date,
417
+ COUNT(*) as wishlists_created
418
+ FROM wishlists
419
+ GROUP BY DATE(created_at)
420
+ ORDER BY date DESC
421
+ LIMIT 7;
422
+
423
+ -- Check wishlist item growth
424
+ SELECT
425
+ DATE(added_at) as date,
426
+ COUNT(*) as items_added
427
+ FROM wishlist_items
428
+ GROUP BY DATE(added_at)
429
+ ORDER BY date DESC
430
+ LIMIT 7;
431
+
432
+ -- Check most popular wishlist names
433
+ SELECT name, COUNT(*) as count
434
+ FROM wishlists
435
+ GROUP BY name
436
+ ORDER BY count DESC
437
+ LIMIT 10;
438
+
439
+ -- Check index usage
440
+ SELECT
441
+ schemaname,
442
+ tablename,
443
+ indexname,
444
+ idx_scan as index_scans,
445
+ idx_tup_read as tuples_read
446
+ FROM pg_stat_user_indexes
447
+ WHERE tablename IN ('wishlists', 'wishlist_items')
448
+ ORDER BY idx_scan DESC;
449
+ ```
450
+
451
+ ---
452
+
453
+ ## Rollback Plan (If Needed)
454
+
455
+ ### When to Rollback
456
+
457
+ - Migration fails during execution
458
+ - Data integrity issues discovered
459
+ - Performance degradation detected
460
+ - Critical bugs in application code
461
+
462
+ ### Rollback Steps
463
+
464
+ ```bash
465
+ # 1. Stop application deployments
466
+ # 2. Execute rollback script
467
+ psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature_down.sql
468
+
469
+ # 3. Verify tables dropped
470
+ psql -U postgres -d ecommerce_prod -c "\d wishlists"
471
+
472
+ # 4. Restore from backup (if needed)
473
+ pg_restore -U postgres -d ecommerce_prod backup_before_wishlist_*.dump
474
+
475
+ # 5. Verify database state
476
+ # 6. Notify stakeholders
477
+ ```
478
+
479
+ ---
480
+
481
+ ## Key Takeaways
482
+
483
+ 1. **Low-Risk Migration**: Adding new tables is safer than modifying existing ones
484
+ 2. **No Downtime**: Migration completed in < 5 seconds with no service interruption
485
+ 3. **Backward Compatible**: Existing code continued working during migration
486
+ 4. **Tested Thoroughly**: Tested on local, staging, and production-like data
487
+ 5. **Monitored Closely**: Tracked metrics for 24 hours after deployment
488
+ 6. **Rollback Ready**: Tested rollback script before production execution
489
+
490
+ ---
491
+
492
+ ## Next Steps
493
+
494
+ - See `optimization-example.md` for optimizing wishlist queries
495
+ - See `../rules/testing-patterns.md` for testing wishlist functionality
496
+ - See `../rules/documentation-standards.md` for documenting the migration
497
+
498
+