Files
managing-apps/.cursor/commands/migration-local.md
2025-11-09 02:08:31 +07:00

9.4 KiB

migration-local

When to Use

Use this command when you want to:

  • Create a new EF Core migration based on model changes
  • Apply the migration to your local PostgreSQL database
  • Update your local database schema to match the current code

Prerequisites

  • .NET SDK installed (dotnet --version)
  • PostgreSQL running locally
  • Local database connection configured (default: Host=localhost;Port=5432;Database=managing;Username=postgres;Password=postgres)

Execution Steps

Step 1: Verify Database Project Structure

Check that the database project exists:

  • Database project: src/Managing.Infrastructure.Database
  • Startup project: src/Managing.Api
  • Migrations folder: src/Managing.Infrastructure.Database/Migrations

Step 2: Build the Solution

Before creating migrations, ensure the solution builds successfully:

Run: dotnet build src/Managing.sln

If build succeeds:

  • Continue to Step 3

If build fails:

  • Show build errors
  • Analyze errors:
    • C# compilation errors
    • Missing dependencies
    • Configuration errors
  • Try to fix errors automatically:
    • Fix C# compilation errors
    • Fix missing imports
    • Fix configuration issues
  • If errors can be fixed:
    • Fix the errors
    • Re-run build
    • If build succeeds, continue to Step 3
    • If build still fails, show errors and ask user for help
  • If errors cannot be fixed automatically:
    • Show detailed error messages
    • Explain what needs to be fixed
    • STOP: Do not proceed until build succeeds

Step 3: Check for Pending Model Changes

Check if there are any pending model changes that require a new migration:

Run: cd src/Managing.Infrastructure.Database && dotnet ef migrations add --dry-run --startup-project ../Managing.Api --name "CheckPendingChanges_$(date +%s)"

If no pending changes detected:

  • Inform: " No pending model changes detected. All migrations are up to date."
  • Ask user: "Do you want to create a migration anyway? (y/n)"
  • If yes: Continue to Step 4
  • If no: STOP - No migration needed

If pending changes detected:

  • Show what changes require migrations
  • Continue to Step 4

Step 4: Generate Migration Name

Ask the user for a migration name, or generate one automatically:

Option 1: User provides name

  • Prompt: "Enter a migration name (e.g., 'AddBacktestJobsTable'):"
  • Use the provided name

Option 2: Auto-generate name

  • Analyze model changes to suggest a descriptive name
  • Format: Add[Entity]Table, Update[Entity]Field, Remove[Entity]Field, etc.
  • Examples:
    • AddBacktestJobsTable
    • AddJobTypeToBacktestJobs
    • UpdateUserTableSchema
  • Ask user to confirm or modify the suggested name

Step 5: Create Migration

Create the migration using EF Core:

Run: cd src/Managing.Infrastructure.Database && dotnet ef migrations add "<migration-name>" --startup-project ../Managing.Api

If migration creation succeeds:

  • Show: " Migration created successfully: "
  • Show the migration file path
  • Continue to Step 6

If migration creation fails:

  • Show error details
  • Common issues:
    • Database connection issues
    • Model configuration errors
    • Missing design-time factory
  • Try to fix automatically:
    • Check connection string in DesignTimeDbContextFactory.cs
    • Verify database is running
    • Check model configurations
  • If errors can be fixed:
    • Fix the errors
    • Re-run migration creation
    • If succeeds, continue to Step 6
  • If errors cannot be fixed:
    • Show detailed error messages
    • Explain what needs to be fixed
    • STOP: Do not proceed until migration is created

Step 6: Review Migration File (Optional)

Show the user the generated migration file:

Run: cat src/Managing.Infrastructure.Database/Migrations/<timestamp>_<migration-name>.cs

Ask: "Review the migration file above. Does it look correct? (y/n)"

If user confirms:

  • Continue to Step 7

If user wants to modify:

  • Allow user to edit the migration file
  • After editing, ask to confirm again
  • Continue to Step 7

Step 7: Apply Migration to Local Database

Apply the migration to the local database:

Run: cd src/Managing.Infrastructure.Database && dotnet ef database update --startup-project ../Managing.Api

If update succeeds:

  • Show: " Migration applied successfully to local database"
  • Show: "Database schema updated: "
  • Continue to Step 8

If update fails:

  • Show error details
  • Common issues:
    • Database connection issues
    • Migration conflicts
    • Database schema conflicts
    • Constraint violations
  • Try to fix automatically:
    • Check database connection
    • Check for conflicting migrations
    • Verify database state
  • If errors can be fixed:
    • Fix the errors
    • Re-run database update
    • If succeeds, continue to Step 8
  • If errors cannot be fixed:
    • Show detailed error messages
    • Explain what needs to be fixed
    • Suggest: "You may need to manually fix the database or rollback the migration"
    • STOP: Do not proceed until migration is applied

Step 8: Verify Migration Status

Verify that the migration was applied successfully:

Run: cd src/Managing.Infrastructure.Database && dotnet ef migrations list --startup-project ../Managing.Api

If migration is listed as applied:

  • Show: " Migration status verified"
  • Show the list of applied migrations
  • Success message: " Migration created and applied successfully!"

If migration is not listed or shows as pending:

  • Warn: "⚠️ Migration may not have been applied correctly"
  • Show migration list
  • Suggest checking the database manually

Error Handling

If build fails:

  • STOP immediately - Do not create migrations for broken code
  • Show build errors in detail
  • Try to fix common errors automatically:
    • C# compilation errors
    • Import path errors
    • Syntax errors
    • Missing imports
  • If errors can be fixed:
    • Fix them automatically
    • Re-run build
    • If build succeeds, continue
    • If build still fails, show errors and ask for help
  • If errors cannot be fixed:
    • Show detailed error messages
    • Explain what needs to be fixed
    • STOP: Do not proceed until build succeeds

If database connection fails:

  • Check if PostgreSQL is running: pg_isready or psql -h localhost -U postgres -c "SELECT 1"
  • Verify connection string in DesignTimeDbContextFactory.cs
  • Check if database exists: psql -h localhost -U postgres -lqt | cut -d \| -f 1 | grep -qw managing
  • If database doesn't exist, create it: createdb -h localhost -U postgres managing
  • Retry migration creation

If migration conflicts:

  • Check existing migrations: cd src/Managing.Infrastructure.Database && dotnet ef migrations list --startup-project ../Managing.Api
  • If migration already exists with same name, suggest a different name
  • If database schema conflicts, suggest reviewing the migration file

If database update fails:

  • Check database state: psql -h localhost -U postgres -d managing -c "\dt"
  • Check applied migrations: psql -h localhost -U postgres -d managing -c "SELECT * FROM \"__EFMigrationsHistory\";"
  • If migration partially applied, may need to rollback or fix manually
  • Suggest: "Review the error and fix the database state, or rollback the migration"

Example Execution

User input: /migration-local

AI execution:

  1. Verify structure: Check src/Managing.Infrastructure.Database exists
  2. Build solution: dotnet build src/Managing.sln Build successful!
  3. Check pending changes: dotnet ef migrations add --dry-run ...⚠️ Pending changes detected
  4. Generate name: Analyze changes → Suggest "AddBacktestJobsTable"
  5. Confirm name: "Migration name: 'AddBacktestJobsTable'. Proceed? (y/n)" → User confirms
  6. Create migration: dotnet ef migrations add "AddBacktestJobsTable" ... Migration created
  7. Review file: Show migration file → User confirms
  8. Apply migration: dotnet ef database update ... Migration applied
  9. Verify status: dotnet ef migrations list ... Migration verified
  10. Success: " Migration created and applied successfully!"

If build fails:

1-2. Same as above 3. Build: dotnet build src/Managing.sln Build failed 4. Analyze errors: C# compilation error in JobEntity.cs 5. Fix errors: Update type definitions 6. Re-run build: dotnet build src/Managing.sln Build successful! 7. Continue with migration creation

If database connection fails:

1-5. Same as above 6. Create migration: dotnet ef migrations add ... Connection failed 7. Check database: pg_isready → Database not running 8. Inform user: "PostgreSQL is not running. Please start PostgreSQL and try again." 9. STOP: Wait for user to start database

Important Notes

  • Always build before creating migrations - ensures code compiles correctly
  • Review migration file before applying - verify it matches your intent
  • Backup database before applying - migrations can modify data
  • Use descriptive migration names - helps track schema changes
  • ⚠️ Migration is applied to local database only - use other tools for production
  • ⚠️ Ensure PostgreSQL is running - connection will fail if database is down
  • 📦 Database project: src/Managing.Infrastructure.Database
  • 🔧 Startup project: src/Managing.Api
  • 🗄️ Local connection: Host=localhost;Port=5432;Database=managing;Username=postgres;Password=postgres
  • 📁 Migrations folder: src/Managing.Infrastructure.Database/Migrations