@zimezone/z-command 1.0.1 → 1.1.1

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 (217) hide show
  1. package/README.md +57 -38
  2. package/dist/cli.js +14 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +1 -7
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +101 -23
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/update.d.ts +11 -0
  9. package/dist/commands/update.d.ts.map +1 -0
  10. package/dist/commands/update.js +88 -0
  11. package/dist/commands/update.js.map +1 -0
  12. package/dist/platforms.d.ts +21 -0
  13. package/dist/platforms.d.ts.map +1 -0
  14. package/dist/platforms.js +137 -0
  15. package/dist/platforms.js.map +1 -0
  16. package/dist/types.d.ts +44 -0
  17. package/dist/types.d.ts.map +1 -0
  18. package/dist/types.js +6 -0
  19. package/dist/types.js.map +1 -0
  20. package/package.json +13 -5
  21. package/templates/agents/api-documenter.agent.md +161 -0
  22. package/templates/agents/architect-review.agent.md +146 -0
  23. package/templates/agents/arm-cortex-expert.agent.md +288 -0
  24. package/templates/agents/backend-architect.agent.md +309 -0
  25. package/templates/agents/backend-security-coder.agent.md +152 -0
  26. package/templates/agents/bash-pro.agent.md +285 -0
  27. package/templates/agents/c-pro.agent.md +35 -0
  28. package/templates/agents/c4-code.agent.md +320 -0
  29. package/templates/agents/c4-component.agent.md +227 -0
  30. package/templates/agents/c4-container.agent.md +248 -0
  31. package/templates/agents/c4-context.agent.md +235 -0
  32. package/templates/agents/conductor-validator.agent.md +245 -0
  33. package/templates/agents/csharp-pro.agent.md +38 -0
  34. package/templates/agents/customer-support.agent.md +148 -0
  35. package/templates/agents/database-admin.agent.md +142 -0
  36. package/templates/agents/database-architect.agent.md +238 -0
  37. package/templates/agents/database-optimizer.agent.md +144 -0
  38. package/templates/agents/debugger.agent.md +30 -0
  39. package/templates/agents/deployment-engineer.agent.md +0 -0
  40. package/templates/agents/devops-troubleshooter.agent.md +138 -0
  41. package/templates/agents/django-pro.agent.md +159 -0
  42. package/templates/agents/docs-architect.agent.md +77 -0
  43. package/templates/agents/dotnet-architect.agent.md +175 -0
  44. package/templates/agents/dx-optimizer.agent.md +63 -0
  45. package/templates/agents/elixir-pro.agent.md +38 -0
  46. package/templates/agents/error-detective.agent.md +32 -0
  47. package/templates/agents/event-sourcing-architect.agent.md +42 -0
  48. package/templates/agents/fastapi-pro.agent.md +171 -0
  49. package/templates/agents/firmware-analyst.agent.md +330 -0
  50. package/templates/agents/frontend-security-coder.agent.md +149 -0
  51. package/templates/agents/haskell-pro.agent.md +37 -0
  52. package/templates/agents/hr-pro.agent.md +105 -0
  53. package/templates/agents/incident-responder.agent.md +190 -0
  54. package/templates/agents/ios-developer.agent.md +198 -0
  55. package/templates/agents/java-pro.agent.md +156 -0
  56. package/templates/agents/javascript-pro.agent.md +35 -0
  57. package/templates/agents/julia-pro.agent.md +187 -0
  58. package/templates/agents/legal-advisor.agent.md +49 -0
  59. package/templates/agents/malware-analyst.agent.md +272 -0
  60. package/templates/agents/mermaid-expert.agent.md +39 -0
  61. package/templates/agents/minecraft-bukkit-pro.agent.md +104 -0
  62. package/templates/agents/mobile-security-coder.agent.md +163 -0
  63. package/templates/agents/monorepo-architect.agent.md +44 -0
  64. package/templates/agents/observability-engineer.agent.md +228 -0
  65. package/templates/agents/performance-engineer.agent.md +167 -0
  66. package/templates/agents/php-pro.agent.md +43 -0
  67. package/templates/agents/posix-shell-pro.agent.md +284 -0
  68. package/templates/agents/quant-analyst.agent.md +32 -0
  69. package/templates/agents/reference-builder.agent.md +167 -0
  70. package/templates/agents/reverse-engineer.agent.md +202 -0
  71. package/templates/agents/risk-manager.agent.md +41 -0
  72. package/templates/agents/ruby-pro.agent.md +35 -0
  73. package/templates/agents/rust-pro.agent.md +156 -0
  74. package/templates/agents/sales-automator.agent.md +35 -0
  75. package/templates/agents/scala-pro.agent.md +60 -0
  76. package/templates/agents/search-specialist.agent.md +59 -0
  77. package/templates/agents/security-auditor.agent.md +138 -0
  78. package/templates/agents/seo-authority-builder.agent.md +116 -0
  79. package/templates/agents/seo-cannibalization-detector.agent.md +103 -0
  80. package/templates/agents/seo-content-auditor.agent.md +63 -0
  81. package/templates/agents/seo-content-planner.agent.md +88 -0
  82. package/templates/agents/seo-content-refresher.agent.md +98 -0
  83. package/templates/agents/seo-content-writer.agent.md +76 -0
  84. package/templates/agents/seo-keyword-strategist.agent.md +75 -0
  85. package/templates/agents/seo-meta-optimizer.agent.md +72 -0
  86. package/templates/agents/seo-snippet-hunter.agent.md +94 -0
  87. package/templates/agents/seo-structure-architect.agent.md +88 -0
  88. package/templates/agents/service-mesh-expert.agent.md +41 -0
  89. package/templates/agents/sql-pro.agent.md +146 -0
  90. package/templates/agents/tdd-orchestrator.agent.md +183 -0
  91. package/templates/agents/temporal-python-pro.agent.md +349 -0
  92. package/templates/agents/terraform-specialist.agent.md +137 -0
  93. package/templates/agents/test-automator.agent.md +203 -0
  94. package/templates/agents/threat-modeling-expert.agent.md +44 -0
  95. package/templates/agents/tutorial-engineer.agent.md +118 -0
  96. package/templates/agents/ui-ux-designer.agent.md +188 -0
  97. package/templates/agents/ui-visual-validator.agent.md +192 -0
  98. package/templates/agents/vector-database-engineer.agent.md +43 -0
  99. package/templates/skills/angular-migration/SKILL.md +410 -0
  100. package/templates/skills/api-design-principles/SKILL.md +528 -0
  101. package/templates/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  102. package/templates/skills/api-design-principles/assets/rest-api-template.py +182 -0
  103. package/templates/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  104. package/templates/skills/api-design-principles/references/rest-best-practices.md +408 -0
  105. package/templates/skills/architecture-decision-records/SKILL.md +428 -0
  106. package/templates/skills/architecture-patterns/SKILL.md +494 -0
  107. package/templates/skills/async-python-patterns/SKILL.md +694 -0
  108. package/templates/skills/auth-implementation-patterns/SKILL.md +634 -0
  109. package/templates/skills/changelog-automation/SKILL.md +552 -0
  110. package/templates/skills/code-review-excellence/SKILL.md +520 -0
  111. package/templates/skills/competitive-landscape/SKILL.md +479 -0
  112. package/templates/skills/context-driven-development/SKILL.md +385 -0
  113. package/templates/skills/cost-optimization/SKILL.md +274 -0
  114. package/templates/skills/cqrs-implementation/SKILL.md +554 -0
  115. package/templates/skills/data-quality-frameworks/SKILL.md +587 -0
  116. package/templates/skills/data-storytelling/SKILL.md +453 -0
  117. package/templates/skills/database-migration/SKILL.md +424 -0
  118. package/templates/skills/dbt-transformation-patterns/SKILL.md +561 -0
  119. package/templates/skills/debugging-strategies/SKILL.md +527 -0
  120. package/templates/skills/defi-protocol-templates/SKILL.md +454 -0
  121. package/templates/skills/dependency-upgrade/SKILL.md +409 -0
  122. package/templates/skills/deployment-pipeline-design/SKILL.md +359 -0
  123. package/templates/skills/distributed-tracing/SKILL.md +438 -0
  124. package/templates/skills/dotnet-backend-patterns/SKILL.md +815 -0
  125. package/templates/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  126. package/templates/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  127. package/templates/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  128. package/templates/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  129. package/templates/skills/e2e-testing-patterns/SKILL.md +547 -0
  130. package/templates/skills/employment-contract-templates/SKILL.md +507 -0
  131. package/templates/skills/error-handling-patterns/SKILL.md +636 -0
  132. package/templates/skills/event-store-design/SKILL.md +437 -0
  133. package/templates/skills/fastapi-templates/SKILL.md +567 -0
  134. package/templates/skills/git-advanced-workflows/SKILL.md +400 -0
  135. package/templates/skills/github-actions-templates/SKILL.md +333 -0
  136. package/templates/skills/go-concurrency-patterns/SKILL.md +655 -0
  137. package/templates/skills/grafana-dashboards/SKILL.md +369 -0
  138. package/templates/skills/helm-chart-scaffolding/SKILL.md +544 -0
  139. package/templates/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  140. package/templates/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  141. package/templates/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  142. package/templates/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  143. package/templates/skills/javascript-testing-patterns/SKILL.md +1025 -0
  144. package/templates/skills/langchain-architecture/SKILL.md +338 -0
  145. package/templates/skills/llm-evaluation/SKILL.md +471 -0
  146. package/templates/skills/microservices-patterns/SKILL.md +595 -0
  147. package/templates/skills/modern-javascript-patterns/SKILL.md +911 -0
  148. package/templates/skills/monorepo-management/SKILL.md +622 -0
  149. package/templates/skills/nextjs-app-router-patterns/SKILL.md +544 -0
  150. package/templates/skills/nodejs-backend-patterns/SKILL.md +1020 -0
  151. package/templates/skills/nx-workspace-patterns/SKILL.md +452 -0
  152. package/templates/skills/openapi-spec-generation/SKILL.md +1028 -0
  153. package/templates/skills/paypal-integration/SKILL.md +467 -0
  154. package/templates/skills/pci-compliance/SKILL.md +466 -0
  155. package/templates/skills/postgresql/SKILL.md +204 -0
  156. package/templates/skills/projection-patterns/SKILL.md +490 -0
  157. package/templates/skills/prometheus-configuration/SKILL.md +392 -0
  158. package/templates/skills/prompt-engineering-patterns/SKILL.md +201 -0
  159. package/templates/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  160. package/templates/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  161. package/templates/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  162. package/templates/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  163. package/templates/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  164. package/templates/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  165. package/templates/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  166. package/templates/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  167. package/templates/skills/python-packaging/SKILL.md +870 -0
  168. package/templates/skills/python-performance-optimization/SKILL.md +869 -0
  169. package/templates/skills/python-testing-patterns/SKILL.md +907 -0
  170. package/templates/skills/rag-implementation/SKILL.md +403 -0
  171. package/templates/skills/react-modernization/SKILL.md +513 -0
  172. package/templates/skills/react-native-architecture/SKILL.md +671 -0
  173. package/templates/skills/react-state-management/SKILL.md +429 -0
  174. package/templates/skills/risk-metrics-calculation/SKILL.md +555 -0
  175. package/templates/skills/rust-async-patterns/SKILL.md +517 -0
  176. package/templates/skills/secrets-management/SKILL.md +346 -0
  177. package/templates/skills/security-requirement-extraction/SKILL.md +677 -0
  178. package/templates/skills/shellcheck-configuration/SKILL.md +454 -0
  179. package/templates/skills/similarity-search-patterns/SKILL.md +558 -0
  180. package/templates/skills/slo-implementation/SKILL.md +329 -0
  181. package/templates/skills/sql-optimization-patterns/SKILL.md +493 -0
  182. package/templates/skills/stripe-integration/SKILL.md +442 -0
  183. package/templates/skills/tailwind-design-system/SKILL.md +666 -0
  184. package/templates/skills/temporal-python-testing/SKILL.md +158 -0
  185. package/templates/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  186. package/templates/skills/temporal-python-testing/resources/local-setup.md +553 -0
  187. package/templates/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  188. package/templates/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  189. package/templates/skills/terraform-module-library/SKILL.md +249 -0
  190. package/templates/skills/terraform-module-library/references/aws-modules.md +63 -0
  191. package/templates/skills/threat-mitigation-mapping/SKILL.md +745 -0
  192. package/templates/skills/track-management/SKILL.md +593 -0
  193. package/templates/skills/typescript-advanced-types/SKILL.md +717 -0
  194. package/templates/skills/ui-ux-pro-max/SKILL.md +352 -0
  195. package/templates/skills/ui-ux-pro-max/data/charts.csv +26 -0
  196. package/templates/skills/ui-ux-pro-max/data/colors.csv +97 -0
  197. package/templates/skills/ui-ux-pro-max/data/icons.csv +101 -0
  198. package/templates/skills/ui-ux-pro-max/data/landing.csv +31 -0
  199. package/templates/skills/ui-ux-pro-max/data/products.csv +97 -0
  200. package/templates/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  201. package/templates/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  202. package/templates/skills/ui-ux-pro-max/data/styles.csv +59 -0
  203. package/templates/skills/ui-ux-pro-max/data/typography.csv +58 -0
  204. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  205. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  206. package/templates/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  207. package/templates/skills/ui-ux-pro-max/scripts/core.py +258 -0
  208. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +547 -0
  209. package/templates/skills/ui-ux-pro-max/scripts/search.py +76 -0
  210. package/templates/skills/uv-package-manager/SKILL.md +831 -0
  211. package/templates/skills/vector-index-tuning/SKILL.md +521 -0
  212. package/templates/skills/wcag-audit-patterns/SKILL.md +555 -0
  213. package/templates/skills/workflow-orchestration-patterns/SKILL.md +316 -0
  214. package/templates/skills/workflow-patterns/SKILL.md +623 -0
  215. package/templates/agents/game-developer.agent.md +0 -57
  216. package/templates/agents/kubernetes-specialist.agent.md +0 -56
  217. package/templates/agents/market-researcher.agent.md +0 -47
@@ -0,0 +1,424 @@
1
+ ---
2
+ name: database-migration
3
+ description: Execute database migrations across ORMs and platforms with zero-downtime strategies, data transformation, and rollback procedures. Use when migrating databases, changing schemas, performing data transformations, or implementing zero-downtime deployment strategies.
4
+ ---
5
+
6
+ # Database Migration
7
+
8
+ Master database schema and data migrations across ORMs (Sequelize, TypeORM, Prisma), including rollback strategies and zero-downtime deployments.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Migrating between different ORMs
13
+ - Performing schema transformations
14
+ - Moving data between databases
15
+ - Implementing rollback procedures
16
+ - Zero-downtime deployments
17
+ - Database version upgrades
18
+ - Data model refactoring
19
+
20
+ ## ORM Migrations
21
+
22
+ ### Sequelize Migrations
23
+ ```javascript
24
+ // migrations/20231201-create-users.js
25
+ module.exports = {
26
+ up: async (queryInterface, Sequelize) => {
27
+ await queryInterface.createTable('users', {
28
+ id: {
29
+ type: Sequelize.INTEGER,
30
+ primaryKey: true,
31
+ autoIncrement: true
32
+ },
33
+ email: {
34
+ type: Sequelize.STRING,
35
+ unique: true,
36
+ allowNull: false
37
+ },
38
+ createdAt: Sequelize.DATE,
39
+ updatedAt: Sequelize.DATE
40
+ });
41
+ },
42
+
43
+ down: async (queryInterface, Sequelize) => {
44
+ await queryInterface.dropTable('users');
45
+ }
46
+ };
47
+
48
+ // Run: npx sequelize-cli db:migrate
49
+ // Rollback: npx sequelize-cli db:migrate:undo
50
+ ```
51
+
52
+ ### TypeORM Migrations
53
+ ```typescript
54
+ // migrations/1701234567-CreateUsers.ts
55
+ import { MigrationInterface, QueryRunner, Table } from 'typeorm';
56
+
57
+ export class CreateUsers1701234567 implements MigrationInterface {
58
+ public async up(queryRunner: QueryRunner): Promise<void> {
59
+ await queryRunner.createTable(
60
+ new Table({
61
+ name: 'users',
62
+ columns: [
63
+ {
64
+ name: 'id',
65
+ type: 'int',
66
+ isPrimary: true,
67
+ isGenerated: true,
68
+ generationStrategy: 'increment'
69
+ },
70
+ {
71
+ name: 'email',
72
+ type: 'varchar',
73
+ isUnique: true
74
+ },
75
+ {
76
+ name: 'created_at',
77
+ type: 'timestamp',
78
+ default: 'CURRENT_TIMESTAMP'
79
+ }
80
+ ]
81
+ })
82
+ );
83
+ }
84
+
85
+ public async down(queryRunner: QueryRunner): Promise<void> {
86
+ await queryRunner.dropTable('users');
87
+ }
88
+ }
89
+
90
+ // Run: npm run typeorm migration:run
91
+ // Rollback: npm run typeorm migration:revert
92
+ ```
93
+
94
+ ### Prisma Migrations
95
+ ```prisma
96
+ // schema.prisma
97
+ model User {
98
+ id Int @id @default(autoincrement())
99
+ email String @unique
100
+ createdAt DateTime @default(now())
101
+ }
102
+
103
+ // Generate migration: npx prisma migrate dev --name create_users
104
+ // Apply: npx prisma migrate deploy
105
+ ```
106
+
107
+ ## Schema Transformations
108
+
109
+ ### Adding Columns with Defaults
110
+ ```javascript
111
+ // Safe migration: add column with default
112
+ module.exports = {
113
+ up: async (queryInterface, Sequelize) => {
114
+ await queryInterface.addColumn('users', 'status', {
115
+ type: Sequelize.STRING,
116
+ defaultValue: 'active',
117
+ allowNull: false
118
+ });
119
+ },
120
+
121
+ down: async (queryInterface) => {
122
+ await queryInterface.removeColumn('users', 'status');
123
+ }
124
+ };
125
+ ```
126
+
127
+ ### Renaming Columns (Zero Downtime)
128
+ ```javascript
129
+ // Step 1: Add new column
130
+ module.exports = {
131
+ up: async (queryInterface, Sequelize) => {
132
+ await queryInterface.addColumn('users', 'full_name', {
133
+ type: Sequelize.STRING
134
+ });
135
+
136
+ // Copy data from old column
137
+ await queryInterface.sequelize.query(
138
+ 'UPDATE users SET full_name = name'
139
+ );
140
+ },
141
+
142
+ down: async (queryInterface) => {
143
+ await queryInterface.removeColumn('users', 'full_name');
144
+ }
145
+ };
146
+
147
+ // Step 2: Update application to use new column
148
+
149
+ // Step 3: Remove old column
150
+ module.exports = {
151
+ up: async (queryInterface) => {
152
+ await queryInterface.removeColumn('users', 'name');
153
+ },
154
+
155
+ down: async (queryInterface, Sequelize) => {
156
+ await queryInterface.addColumn('users', 'name', {
157
+ type: Sequelize.STRING
158
+ });
159
+ }
160
+ };
161
+ ```
162
+
163
+ ### Changing Column Types
164
+ ```javascript
165
+ module.exports = {
166
+ up: async (queryInterface, Sequelize) => {
167
+ // For large tables, use multi-step approach
168
+
169
+ // 1. Add new column
170
+ await queryInterface.addColumn('users', 'age_new', {
171
+ type: Sequelize.INTEGER
172
+ });
173
+
174
+ // 2. Copy and transform data
175
+ await queryInterface.sequelize.query(`
176
+ UPDATE users
177
+ SET age_new = CAST(age AS INTEGER)
178
+ WHERE age IS NOT NULL
179
+ `);
180
+
181
+ // 3. Drop old column
182
+ await queryInterface.removeColumn('users', 'age');
183
+
184
+ // 4. Rename new column
185
+ await queryInterface.renameColumn('users', 'age_new', 'age');
186
+ },
187
+
188
+ down: async (queryInterface, Sequelize) => {
189
+ await queryInterface.changeColumn('users', 'age', {
190
+ type: Sequelize.STRING
191
+ });
192
+ }
193
+ };
194
+ ```
195
+
196
+ ## Data Transformations
197
+
198
+ ### Complex Data Migration
199
+ ```javascript
200
+ module.exports = {
201
+ up: async (queryInterface, Sequelize) => {
202
+ // Get all records
203
+ const [users] = await queryInterface.sequelize.query(
204
+ 'SELECT id, address_string FROM users'
205
+ );
206
+
207
+ // Transform each record
208
+ for (const user of users) {
209
+ const addressParts = user.address_string.split(',');
210
+
211
+ await queryInterface.sequelize.query(
212
+ `UPDATE users
213
+ SET street = :street,
214
+ city = :city,
215
+ state = :state
216
+ WHERE id = :id`,
217
+ {
218
+ replacements: {
219
+ id: user.id,
220
+ street: addressParts[0]?.trim(),
221
+ city: addressParts[1]?.trim(),
222
+ state: addressParts[2]?.trim()
223
+ }
224
+ }
225
+ );
226
+ }
227
+
228
+ // Drop old column
229
+ await queryInterface.removeColumn('users', 'address_string');
230
+ },
231
+
232
+ down: async (queryInterface, Sequelize) => {
233
+ // Reconstruct original column
234
+ await queryInterface.addColumn('users', 'address_string', {
235
+ type: Sequelize.STRING
236
+ });
237
+
238
+ await queryInterface.sequelize.query(`
239
+ UPDATE users
240
+ SET address_string = CONCAT(street, ', ', city, ', ', state)
241
+ `);
242
+
243
+ await queryInterface.removeColumn('users', 'street');
244
+ await queryInterface.removeColumn('users', 'city');
245
+ await queryInterface.removeColumn('users', 'state');
246
+ }
247
+ };
248
+ ```
249
+
250
+ ## Rollback Strategies
251
+
252
+ ### Transaction-Based Migrations
253
+ ```javascript
254
+ module.exports = {
255
+ up: async (queryInterface, Sequelize) => {
256
+ const transaction = await queryInterface.sequelize.transaction();
257
+
258
+ try {
259
+ await queryInterface.addColumn(
260
+ 'users',
261
+ 'verified',
262
+ { type: Sequelize.BOOLEAN, defaultValue: false },
263
+ { transaction }
264
+ );
265
+
266
+ await queryInterface.sequelize.query(
267
+ 'UPDATE users SET verified = true WHERE email_verified_at IS NOT NULL',
268
+ { transaction }
269
+ );
270
+
271
+ await transaction.commit();
272
+ } catch (error) {
273
+ await transaction.rollback();
274
+ throw error;
275
+ }
276
+ },
277
+
278
+ down: async (queryInterface) => {
279
+ await queryInterface.removeColumn('users', 'verified');
280
+ }
281
+ };
282
+ ```
283
+
284
+ ### Checkpoint-Based Rollback
285
+ ```javascript
286
+ module.exports = {
287
+ up: async (queryInterface, Sequelize) => {
288
+ // Create backup table
289
+ await queryInterface.sequelize.query(
290
+ 'CREATE TABLE users_backup AS SELECT * FROM users'
291
+ );
292
+
293
+ try {
294
+ // Perform migration
295
+ await queryInterface.addColumn('users', 'new_field', {
296
+ type: Sequelize.STRING
297
+ });
298
+
299
+ // Verify migration
300
+ const [result] = await queryInterface.sequelize.query(
301
+ "SELECT COUNT(*) as count FROM users WHERE new_field IS NULL"
302
+ );
303
+
304
+ if (result[0].count > 0) {
305
+ throw new Error('Migration verification failed');
306
+ }
307
+
308
+ // Drop backup
309
+ await queryInterface.dropTable('users_backup');
310
+ } catch (error) {
311
+ // Restore from backup
312
+ await queryInterface.sequelize.query('DROP TABLE users');
313
+ await queryInterface.sequelize.query(
314
+ 'CREATE TABLE users AS SELECT * FROM users_backup'
315
+ );
316
+ await queryInterface.dropTable('users_backup');
317
+ throw error;
318
+ }
319
+ }
320
+ };
321
+ ```
322
+
323
+ ## Zero-Downtime Migrations
324
+
325
+ ### Blue-Green Deployment Strategy
326
+ ```javascript
327
+ // Phase 1: Make changes backward compatible
328
+ module.exports = {
329
+ up: async (queryInterface, Sequelize) => {
330
+ // Add new column (both old and new code can work)
331
+ await queryInterface.addColumn('users', 'email_new', {
332
+ type: Sequelize.STRING
333
+ });
334
+ }
335
+ };
336
+
337
+ // Phase 2: Deploy code that writes to both columns
338
+
339
+ // Phase 3: Backfill data
340
+ module.exports = {
341
+ up: async (queryInterface) => {
342
+ await queryInterface.sequelize.query(`
343
+ UPDATE users
344
+ SET email_new = email
345
+ WHERE email_new IS NULL
346
+ `);
347
+ }
348
+ };
349
+
350
+ // Phase 4: Deploy code that reads from new column
351
+
352
+ // Phase 5: Remove old column
353
+ module.exports = {
354
+ up: async (queryInterface) => {
355
+ await queryInterface.removeColumn('users', 'email');
356
+ }
357
+ };
358
+ ```
359
+
360
+ ## Cross-Database Migrations
361
+
362
+ ### PostgreSQL to MySQL
363
+ ```javascript
364
+ // Handle differences
365
+ module.exports = {
366
+ up: async (queryInterface, Sequelize) => {
367
+ const dialectName = queryInterface.sequelize.getDialect();
368
+
369
+ if (dialectName === 'mysql') {
370
+ await queryInterface.createTable('users', {
371
+ id: {
372
+ type: Sequelize.INTEGER,
373
+ primaryKey: true,
374
+ autoIncrement: true
375
+ },
376
+ data: {
377
+ type: Sequelize.JSON // MySQL JSON type
378
+ }
379
+ });
380
+ } else if (dialectName === 'postgres') {
381
+ await queryInterface.createTable('users', {
382
+ id: {
383
+ type: Sequelize.INTEGER,
384
+ primaryKey: true,
385
+ autoIncrement: true
386
+ },
387
+ data: {
388
+ type: Sequelize.JSONB // PostgreSQL JSONB type
389
+ }
390
+ });
391
+ }
392
+ }
393
+ };
394
+ ```
395
+
396
+ ## Resources
397
+
398
+ - **references/orm-switching.md**: ORM migration guides
399
+ - **references/schema-migration.md**: Schema transformation patterns
400
+ - **references/data-transformation.md**: Data migration scripts
401
+ - **references/rollback-strategies.md**: Rollback procedures
402
+ - **assets/schema-migration-template.sql**: SQL migration templates
403
+ - **assets/data-migration-script.py**: Data migration utilities
404
+ - **scripts/test-migration.sh**: Migration testing script
405
+
406
+ ## Best Practices
407
+
408
+ 1. **Always Provide Rollback**: Every up() needs a down()
409
+ 2. **Test Migrations**: Test on staging first
410
+ 3. **Use Transactions**: Atomic migrations when possible
411
+ 4. **Backup First**: Always backup before migration
412
+ 5. **Small Changes**: Break into small, incremental steps
413
+ 6. **Monitor**: Watch for errors during deployment
414
+ 7. **Document**: Explain why and how
415
+ 8. **Idempotent**: Migrations should be rerunnable
416
+
417
+ ## Common Pitfalls
418
+
419
+ - Not testing rollback procedures
420
+ - Making breaking changes without downtime strategy
421
+ - Forgetting to handle NULL values
422
+ - Not considering index performance
423
+ - Ignoring foreign key constraints
424
+ - Migrating too much data at once