@the-bearded-bear/claude-craft 8.8.1 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dev/i18n/de/Angular/commands/check-compliance.md +218 -168
- package/Dev/i18n/de/Common/agents/refactoring-specialist.md +146 -69
- package/Dev/i18n/de/Common/commands/add-technology.md +166 -68
- package/Dev/i18n/de/Common/commands/setup-ci.md +216 -33
- package/Dev/i18n/de/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/de/Python/checklists/new-feature.md +319 -44
- package/Dev/i18n/de/React/rules/02-architecture.md +483 -322
- package/Dev/i18n/de/React/rules/03-coding-standards.md +584 -368
- package/Dev/i18n/de/Symfony/commands/check-compliance.md +186 -114
- package/Dev/i18n/de/Symfony/rules/07-testing-symfony.md +679 -10
- package/Dev/i18n/de/UIUX/commands/a11y-component.md +284 -26
- package/Dev/i18n/de/UIUX/commands/design-tokens.md +199 -35
- package/Dev/i18n/de/UIUX/commands/user-flow.md +179 -16
- package/Dev/i18n/de/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/es/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/es/Common/commands/add-technology.md +158 -60
- package/Dev/i18n/es/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/es/React/commands/check-testing.md +263 -169
- package/Dev/i18n/es/ReactNative/commands/check-testing.md +256 -198
- package/Dev/i18n/es/Symfony/commands/check-compliance.md +189 -117
- package/Dev/i18n/es/Symfony/commands/check-testing.md +301 -102
- package/Dev/i18n/es/Symfony/commands/migration-plan.md +267 -34
- package/Dev/i18n/es/UIUX/commands/a11y-component.md +274 -16
- package/Dev/i18n/es/UIUX/commands/design-tokens.md +186 -22
- package/Dev/i18n/es/UIUX/commands/user-flow.md +173 -10
- package/Dev/i18n/es/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/fr/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/fr/Common/commands/ralph-run.md +138 -60
- package/Dev/i18n/fr/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/fr/React/commands/check-architecture.md +370 -53
- package/Dev/i18n/fr/React/commands/check-code-quality.md +454 -64
- package/Dev/i18n/fr/React/commands/check-testing.md +476 -102
- package/Dev/i18n/fr/Symfony/commands/check-compliance.md +188 -116
- package/Dev/i18n/fr/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/pt/Angular/commands/check-compliance.md +225 -175
- package/Dev/i18n/pt/Common/agents/ralph-conductor.md +211 -30
- package/Dev/i18n/pt/Common/commands/add-technology.md +149 -51
- package/Dev/i18n/pt/Common/commands/ralph-run.md +239 -35
- package/Dev/i18n/pt/Flutter/commands/analyze-performance.md +331 -46
- package/Dev/i18n/pt/Flutter/commands/check-compliance.md +234 -29
- package/Dev/i18n/pt/Flutter/commands/generate-feature.md +526 -51
- package/Dev/i18n/pt/Flutter/commands/generate-widget.md +515 -27
- package/Dev/i18n/pt/Flutter/commands/golden-update.md +322 -46
- package/Dev/i18n/pt/Flutter/commands/localization-check.md +278 -37
- package/Dev/i18n/pt/Laravel/commands/check-compliance.md +212 -104
- package/Dev/i18n/pt/React/commands/accessibility-check.md +151 -42
- package/Dev/i18n/pt/React/commands/bundle-analyze.md +300 -25
- package/Dev/i18n/pt/React/commands/check-architecture.md +369 -34
- package/Dev/i18n/pt/React/commands/check-code-quality.md +440 -34
- package/Dev/i18n/pt/React/commands/check-compliance.md +232 -62
- package/Dev/i18n/pt/React/commands/check-security.md +370 -31
- package/Dev/i18n/pt/React/commands/check-testing.md +473 -43
- package/Dev/i18n/pt/React/commands/generate-component.md +454 -19
- package/Dev/i18n/pt/React/commands/generate-hook.md +425 -24
- package/Dev/i18n/pt/React/commands/storybook-story.md +520 -35
- package/Dev/i18n/pt/ReactNative/commands/app-size.md +358 -387
- package/Dev/i18n/pt/ReactNative/commands/check-code-quality.md +246 -75
- package/Dev/i18n/pt/ReactNative/commands/check-compliance.md +191 -85
- package/Dev/i18n/pt/ReactNative/commands/check-security.md +363 -115
- package/Dev/i18n/pt/ReactNative/commands/check-testing.md +269 -79
- package/Dev/i18n/pt/ReactNative/commands/generate-screen.md +491 -324
- package/Dev/i18n/pt/ReactNative/commands/native-module.md +539 -82
- package/Dev/i18n/pt/ReactNative/commands/store-prepare.md +429 -185
- package/Dev/i18n/pt/ReactNative/rules/02-architecture.md +1084 -31
- package/Dev/i18n/pt/Symfony/commands/check-compliance.md +195 -123
- package/Dev/i18n/pt/UIUX/commands/a11y-audit.md +208 -24
- package/Dev/i18n/pt/UIUX/commands/a11y-component.md +281 -23
- package/Dev/i18n/pt/UIUX/commands/design-tokens.md +197 -33
- package/Dev/i18n/pt/UIUX/commands/user-flow.md +183 -20
- package/Dev/i18n/pt/VueJS/commands/check-compliance.md +228 -103
- package/Dev/i18n/pt/Workflow/commands/analyze.md +147 -146
- package/Dev/i18n/pt/Workflow/commands/design.md +205 -204
- package/Dev/i18n/pt/Workflow/commands/implement.md +184 -184
- package/Project/i18n/de/Sprint/commands/dev.md +339 -86
- package/Project/i18n/es/Sprint/commands/dev.md +342 -91
- package/Project/i18n/pt/Sprint/commands/dev.md +343 -92
- package/bundles/cursor/.cursorrules +1 -1
- package/bundles/windsurf/.windsurfrules +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ argument-hint: [arguments]
|
|
|
5
5
|
|
|
6
6
|
# Planificación de Migración de Base de Datos
|
|
7
7
|
|
|
8
|
-
Eres un DBA y arquitecto senior
|
|
8
|
+
Eres un DBA y arquitecto Symfony senior. Debes planificar una migración de base de datos compleja con una estrategia de zero-downtime, incluyendo el rollback y las pruebas.
|
|
9
9
|
|
|
10
10
|
## Argumentos
|
|
11
11
|
$ARGUMENTS
|
|
@@ -15,10 +15,6 @@ Argumentos:
|
|
|
15
15
|
|
|
16
16
|
Ejemplo: `/symfony:migration-plan "Añadir sistema de versionado en los documentos"`
|
|
17
17
|
|
|
18
|
-
## Modo Plan
|
|
19
|
-
|
|
20
|
-
> El modo plan se activa automáticamente cuando el alcance abarca varios módulos o requiere una investigación transversal.
|
|
21
|
-
|
|
22
18
|
## MISIÓN
|
|
23
19
|
|
|
24
20
|
### Paso 1: Analizar el Cambio
|
|
@@ -28,83 +24,320 @@ Ejemplo: `/symfony:migration-plan "Añadir sistema de versionado en los document
|
|
|
28
24
|
📋 ANÁLISIS DE MIGRACIÓN
|
|
29
25
|
══════════════════════════════════════════════════════════════
|
|
30
26
|
|
|
31
|
-
Descripción: {Descripción de la migración}
|
|
32
|
-
Fecha prevista: {YYYY-MM-DD}
|
|
33
|
-
Entornos: dev → staging →
|
|
27
|
+
Descripción : {Descripción de la migración}
|
|
28
|
+
Fecha prevista : {YYYY-MM-DD}
|
|
29
|
+
Entornos : dev → staging → production
|
|
34
30
|
|
|
35
31
|
──────────────────────────────────────────────────────────────
|
|
36
32
|
🔍 ESTADO ACTUAL
|
|
37
33
|
──────────────────────────────────────────────────────────────
|
|
38
34
|
|
|
39
|
-
Tablas
|
|
40
|
-
-
|
|
41
|
-
-
|
|
35
|
+
Tablas afectadas :
|
|
36
|
+
- tabla_1 (X filas)
|
|
37
|
+
- tabla_2 (Y filas)
|
|
42
38
|
|
|
43
|
-
Dependencias:
|
|
44
|
-
- Entidades: Entity1, Entity2
|
|
45
|
-
-
|
|
46
|
-
- Controladores: Controller1
|
|
39
|
+
Dependencias :
|
|
40
|
+
- Entidades : Entity1, Entity2
|
|
41
|
+
- Servicios : Service1, Service2
|
|
42
|
+
- Controladores : Controller1
|
|
47
43
|
|
|
48
44
|
──────────────────────────────────────────────────────────────
|
|
49
45
|
⚠️ EVALUACIÓN DE RIESGOS
|
|
50
46
|
──────────────────────────────────────────────────────────────
|
|
51
47
|
|
|
52
48
|
| Riesgo | Probabilidad | Impacto | Mitigación |
|
|
53
|
-
|
|
54
|
-
|
|
|
55
|
-
| Pérdida de datos | Baja |
|
|
56
|
-
| Downtime | Media |
|
|
49
|
+
|--------|--------------|---------|------------|
|
|
50
|
+
| Bloqueo largo de tabla | Media | Alto | Migración por etapas |
|
|
51
|
+
| Pérdida de datos | Baja | Crítico | Backup + test de restauración |
|
|
52
|
+
| Downtime | Media | Alto | Blue/Green + feature flags |
|
|
57
53
|
```
|
|
58
54
|
|
|
59
55
|
### Paso 2: Estrategia de Migración
|
|
60
56
|
|
|
61
|
-
####
|
|
57
|
+
#### Patrón Expand/Contract (Zero-Downtime)
|
|
62
58
|
|
|
63
59
|
```
|
|
64
60
|
┌─────────────────────────────────────────────────────────────┐
|
|
65
|
-
│ FASE 1: EXPAND (
|
|
61
|
+
│ FASE 1: EXPAND (Añadir) │
|
|
66
62
|
│ - Añadir nueva columna/tabla │
|
|
67
63
|
│ - Columna nullable o con valor por defecto │
|
|
68
|
-
│ - Sin
|
|
69
|
-
│ -
|
|
64
|
+
│ - Sin eliminaciones │
|
|
65
|
+
│ - La app continúa funcionando │
|
|
70
66
|
└─────────────────────────────────────────────────────────────┘
|
|
71
67
|
│
|
|
72
68
|
▼
|
|
73
69
|
┌─────────────────────────────────────────────────────────────┐
|
|
74
70
|
│ FASE 2: MIGRATE (Datos) │
|
|
75
71
|
│ - Copiar/transformar los datos │
|
|
76
|
-
│ -
|
|
77
|
-
│ - Validación de datos migrados
|
|
72
|
+
│ - Procesamiento por lotes para grandes volúmenes │
|
|
73
|
+
│ - Validación de los datos migrados │
|
|
78
74
|
└─────────────────────────────────────────────────────────────┘
|
|
79
75
|
│
|
|
80
76
|
▼
|
|
81
77
|
┌─────────────────────────────────────────────────────────────┐
|
|
82
78
|
│ FASE 3: UPDATE (Aplicación) │
|
|
83
|
-
│ - Desplegar código
|
|
84
|
-
│ - Escritura en
|
|
85
|
-
│ - Feature flag si necesario
|
|
79
|
+
│ - Desplegar el código que usa la nueva estructura │
|
|
80
|
+
│ - Escritura en la antigua Y en la nueva durante la transición│
|
|
81
|
+
│ - Feature flag si es necesario │
|
|
86
82
|
└─────────────────────────────────────────────────────────────┘
|
|
87
83
|
│
|
|
88
84
|
▼
|
|
89
85
|
┌─────────────────────────────────────────────────────────────┐
|
|
90
86
|
│ FASE 4: CONTRACT (Limpieza) │
|
|
91
|
-
│ - Eliminar antigua columna/tabla
|
|
92
|
-
│ - Eliminar código de compatibilidad
|
|
93
|
-
│ - Puede
|
|
87
|
+
│ - Eliminar la antigua columna/tabla │
|
|
88
|
+
│ - Eliminar el código de compatibilidad │
|
|
89
|
+
│ - Puede realizarse más tarde, con total seguridad │
|
|
94
90
|
└─────────────────────────────────────────────────────────────┘
|
|
95
91
|
```
|
|
96
92
|
|
|
97
93
|
### Paso 3: Generar las Migraciones
|
|
98
94
|
|
|
99
|
-
|
|
95
|
+
#### Migración 1: Expand (añadir estructura)
|
|
96
|
+
|
|
97
|
+
```php
|
|
98
|
+
<?php
|
|
99
|
+
|
|
100
|
+
declare(strict_types=1);
|
|
101
|
+
|
|
102
|
+
namespace DoctrineMigrations;
|
|
103
|
+
|
|
104
|
+
use Doctrine\DBAL\Schema\Schema;
|
|
105
|
+
use Doctrine\Migrations\AbstractMigration;
|
|
106
|
+
|
|
107
|
+
final class Version{TIMESTAMP}_Expand extends AbstractMigration
|
|
108
|
+
{
|
|
109
|
+
public function getDescription(): string
|
|
110
|
+
{
|
|
111
|
+
return 'Fase 1: Añadir la nueva estructura';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public function up(Schema $schema): void
|
|
115
|
+
{
|
|
116
|
+
// Añadir nueva columna (nullable para compatibilidad)
|
|
117
|
+
$this->addSql('ALTER TABLE {table} ADD COLUMN {new_column} VARCHAR(255) DEFAULT NULL');
|
|
118
|
+
|
|
119
|
+
// Añadir nueva tabla
|
|
120
|
+
$this->addSql('CREATE TABLE {new_table} (
|
|
121
|
+
id UUID PRIMARY KEY,
|
|
122
|
+
{table}_id UUID NOT NULL REFERENCES {table}(id),
|
|
123
|
+
version INT NOT NULL DEFAULT 1,
|
|
124
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
125
|
+
)');
|
|
126
|
+
|
|
127
|
+
// Añadir índice (CONCURRENTLY para PostgreSQL)
|
|
128
|
+
$this->addSql('CREATE INDEX CONCURRENTLY idx_{table}_{column} ON {table}({column})');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public function down(Schema $schema): void
|
|
132
|
+
{
|
|
133
|
+
$this->addSql('DROP INDEX IF EXISTS idx_{table}_{column}');
|
|
134
|
+
$this->addSql('DROP TABLE IF EXISTS {new_table}');
|
|
135
|
+
$this->addSql('ALTER TABLE {table} DROP COLUMN IF EXISTS {new_column}');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
#### Migración 2: Migración de Datos
|
|
141
|
+
|
|
142
|
+
```php
|
|
143
|
+
<?php
|
|
144
|
+
|
|
145
|
+
declare(strict_types=1);
|
|
146
|
+
|
|
147
|
+
namespace DoctrineMigrations;
|
|
148
|
+
|
|
149
|
+
use Doctrine\DBAL\Schema\Schema;
|
|
150
|
+
use Doctrine\Migrations\AbstractMigration;
|
|
151
|
+
|
|
152
|
+
final class Version{TIMESTAMP}_MigrateData extends AbstractMigration
|
|
153
|
+
{
|
|
154
|
+
private const BATCH_SIZE = 1000;
|
|
155
|
+
|
|
156
|
+
public function getDescription(): string
|
|
157
|
+
{
|
|
158
|
+
return 'Fase 2: Migrar los datos existentes';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
public function up(Schema $schema): void
|
|
162
|
+
{
|
|
163
|
+
// Migración por lotes para evitar bloqueos prolongados
|
|
164
|
+
$connection = $this->connection;
|
|
165
|
+
|
|
166
|
+
$totalRows = (int) $connection->fetchOne('SELECT COUNT(*) FROM {table} WHERE {new_column} IS NULL');
|
|
167
|
+
$processed = 0;
|
|
168
|
+
|
|
169
|
+
$this->write("Migrating $totalRows rows...");
|
|
170
|
+
|
|
171
|
+
while ($processed < $totalRows) {
|
|
172
|
+
$this->addSql("
|
|
173
|
+
UPDATE {table}
|
|
174
|
+
SET {new_column} = {transformation}
|
|
175
|
+
WHERE id IN (
|
|
176
|
+
SELECT id FROM {table}
|
|
177
|
+
WHERE {new_column} IS NULL
|
|
178
|
+
LIMIT " . self::BATCH_SIZE . "
|
|
179
|
+
)
|
|
180
|
+
");
|
|
181
|
+
|
|
182
|
+
$processed += self::BATCH_SIZE;
|
|
183
|
+
$this->write("Processed $processed / $totalRows");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public function down(Schema $schema): void
|
|
188
|
+
{
|
|
189
|
+
$this->addSql("UPDATE {table} SET {new_column} = NULL");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
#### Migración 3: Contract (limpieza)
|
|
195
|
+
|
|
196
|
+
```php
|
|
197
|
+
<?php
|
|
198
|
+
|
|
199
|
+
declare(strict_types=1);
|
|
200
|
+
|
|
201
|
+
namespace DoctrineMigrations;
|
|
202
|
+
|
|
203
|
+
use Doctrine\DBAL\Schema\Schema;
|
|
204
|
+
use Doctrine\Migrations\AbstractMigration;
|
|
205
|
+
|
|
206
|
+
final class Version{TIMESTAMP}_Contract extends AbstractMigration
|
|
207
|
+
{
|
|
208
|
+
public function getDescription(): string
|
|
209
|
+
{
|
|
210
|
+
return 'Fase 4: Eliminar la antigua estructura (Ejecutar DESPUÉS de la validación completa)';
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
public function up(Schema $schema): void
|
|
214
|
+
{
|
|
215
|
+
// Verificar que todos los datos están migrados
|
|
216
|
+
$count = $this->connection->fetchOne('SELECT COUNT(*) FROM {table} WHERE {new_column} IS NULL');
|
|
217
|
+
if ($count > 0) {
|
|
218
|
+
throw new \RuntimeException("Migración incompleta: $count filas no migradas");
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Convertir la columna a NOT NULL
|
|
222
|
+
$this->addSql('ALTER TABLE {table} ALTER COLUMN {new_column} SET NOT NULL');
|
|
223
|
+
|
|
224
|
+
// Eliminar la antigua columna
|
|
225
|
+
$this->addSql('ALTER TABLE {table} DROP COLUMN {old_column}');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public function down(Schema $schema): void
|
|
229
|
+
{
|
|
230
|
+
$this->addSql('ALTER TABLE {table} ADD COLUMN {old_column} VARCHAR(255)');
|
|
231
|
+
$this->addSql('UPDATE {table} SET {old_column} = {reverse_transformation}');
|
|
232
|
+
$this->addSql('ALTER TABLE {table} ALTER COLUMN {new_column} DROP NOT NULL');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Paso 4: Plan de Despliegue
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
══════════════════════════════════════════════════════════════
|
|
241
|
+
📅 PLAN DE DESPLIEGUE
|
|
242
|
+
══════════════════════════════════════════════════════════════
|
|
243
|
+
|
|
244
|
+
## Prerrequisitos
|
|
245
|
+
|
|
246
|
+
- [ ] Backup de la base de datos
|
|
247
|
+
- [ ] Test de restauración del backup
|
|
248
|
+
- [ ] Ventana de mantenimiento comunicada
|
|
249
|
+
- [ ] Equipo disponible
|
|
250
|
+
|
|
251
|
+
## Modo Plan
|
|
252
|
+
|
|
253
|
+
> El modo plan se activa automáticamente cuando el alcance abarca varios módulos o requiere una investigación transversal.
|
|
254
|
+
|
|
255
|
+
## D-1: Preparación
|
|
256
|
+
|
|
257
|
+
- [ ] Mergear las migraciones en main
|
|
258
|
+
- [ ] Desplegar en staging
|
|
259
|
+
- [ ] Ejecutar las migraciones en staging
|
|
260
|
+
- [ ] Pruebas E2E completas
|
|
261
|
+
|
|
262
|
+
## Día D: Producción
|
|
263
|
+
|
|
264
|
+
### 09:00 - Fase 1: Expand
|
|
265
|
+
```bash
|
|
266
|
+
# Backup
|
|
267
|
+
docker compose exec db pg_dump -U user db > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
268
|
+
|
|
269
|
+
# Migración expand
|
|
270
|
+
docker compose exec php php bin/console doctrine:migrations:execute 'DoctrineMigrations\Version{TIMESTAMP}_Expand' --up
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### 09:15 - Fase 2: Migración de Datos
|
|
274
|
+
```bash
|
|
275
|
+
# Ejecutar con monitorización
|
|
276
|
+
docker compose exec php php bin/console doctrine:migrations:execute 'DoctrineMigrations\Version{TIMESTAMP}_MigrateData' --up
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### 09:30 - Fase 3: Desplegar el Nuevo Código
|
|
280
|
+
```bash
|
|
281
|
+
# Desplegar la aplicación con el nuevo código
|
|
282
|
+
./deploy.sh production
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 10:00 - Validación
|
|
286
|
+
- [ ] Smoke tests
|
|
287
|
+
- [ ] Verificar los logs (sin errores)
|
|
288
|
+
- [ ] Verificar las métricas
|
|
289
|
+
- [ ] Probar las funcionalidades afectadas
|
|
290
|
+
|
|
291
|
+
### D+7 - Fase 4: Contract (opcional)
|
|
292
|
+
```bash
|
|
293
|
+
# Después de la validación completa
|
|
294
|
+
docker compose exec php php bin/console doctrine:migrations:execute 'DoctrineMigrations\Version{TIMESTAMP}_Contract' --up
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
══════════════════════════════════════════════════════════════
|
|
298
|
+
🔙 PLAN DE ROLLBACK
|
|
299
|
+
══════════════════════════════════════════════════════════════
|
|
300
|
+
|
|
301
|
+
### Rollback Fase 1 (Expand)
|
|
302
|
+
```bash
|
|
303
|
+
docker compose exec php php bin/console doctrine:migrations:execute 'DoctrineMigrations\Version{TIMESTAMP}_Expand' --down
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Rollback Fase 2 (Datos)
|
|
307
|
+
```bash
|
|
308
|
+
docker compose exec php php bin/console doctrine:migrations:execute 'DoctrineMigrations\Version{TIMESTAMP}_MigrateData' --down
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Rollback Completo (si es crítico)
|
|
312
|
+
```bash
|
|
313
|
+
# Restaurar el backup
|
|
314
|
+
docker compose exec db psql -U user db < backup_YYYYMMDD_HHMMSS.sql
|
|
315
|
+
|
|
316
|
+
# Redesplegar la versión anterior
|
|
317
|
+
git checkout {previous_tag}
|
|
318
|
+
./deploy.sh production
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
══════════════════════════════════════════════════════════════
|
|
322
|
+
✅ CHECKLIST POST-MIGRACIÓN
|
|
323
|
+
══════════════════════════════════════════════════════════════
|
|
324
|
+
|
|
325
|
+
- [ ] Todas las migraciones ejecutadas con éxito
|
|
326
|
+
- [ ] Sin errores en los logs
|
|
327
|
+
- [ ] Métricas de rendimiento nominales
|
|
328
|
+
- [ ] Tests funcionales OK
|
|
329
|
+
- [ ] Usuarios informados (si el impacto es visible)
|
|
330
|
+
- [ ] Documentación actualizada
|
|
331
|
+
- [ ] Backup eliminado tras la validación (D+30)
|
|
332
|
+
```
|
|
100
333
|
|
|
101
334
|
### Comandos Útiles
|
|
102
335
|
|
|
103
336
|
```bash
|
|
104
|
-
# Estado de migraciones
|
|
337
|
+
# Estado de las migraciones
|
|
105
338
|
docker compose exec php php bin/console doctrine:migrations:status
|
|
106
339
|
|
|
107
|
-
# Ver migraciones pendientes
|
|
340
|
+
# Ver las migraciones pendientes
|
|
108
341
|
docker compose exec php php bin/console doctrine:migrations:list
|
|
109
342
|
|
|
110
343
|
# Ejecutar una migración específica
|