// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Microsoft.Extensions.DependencyInjection; using Migrations.Migrations; using Migrations.Migrations.MongoDb; using Squidex.Infrastructure; using Squidex.Infrastructure.Migrations; namespace Migrations { public sealed class MigrationPath : IMigrationPath { private const int CurrentVersion = 25; private readonly IServiceProvider serviceProvider; public MigrationPath(IServiceProvider serviceProvider) { this.serviceProvider = serviceProvider; } public (int Version, IEnumerable? Migrations) GetNext(int version) { if (version == CurrentVersion) { return (CurrentVersion, null); } var migrations = ResolveMigrators(version).NotNull().ToList(); return (CurrentVersion, migrations); } private IEnumerable ResolveMigrators(int version) { yield return serviceProvider.GetRequiredService(); // Version 06: Convert Event store. Must always be executed first. if (version < 6) { yield return serviceProvider.GetRequiredService(); } // Version 22: Integrate Domain Id. if (version < 22) { yield return serviceProvider.GetRequiredService(); } // Version 07: Introduces AppId for backups. else if (version < 7) { yield return serviceProvider.GetRequiredService(); } // Version 05: Fixes the broken command architecture and requires a rebuild of all snapshots. if (version < 5) { yield return serviceProvider.GetRequiredService(); } else { // Version 09: Grain indexes. if (version < 9) { yield return serviceProvider.GetService(); } // Version 12: Introduce roles. // Version 24: Improve a naming in the languages config. // Version 26: Introduce full deletion. if (version < 26) { yield return serviceProvider.GetRequiredService(); yield return serviceProvider.GetRequiredService(); yield return serviceProvider.GetRequiredService(); } // Version 18: Rebuild assets. if (version < 18) { yield return serviceProvider.GetService(); yield return serviceProvider.GetService(); } else { // Version 20: Rename slug field. if (version < 20) { yield return serviceProvider.GetService(); } // Version 22: Introduce domain id. // Version 23: Fix parent id. if (version < 23) { yield return serviceProvider.GetRequiredService().ForAssets(); } } // Version 21: Introduce content drafts V2. // Version 25: Convert content ids to names. if (version < 25) { yield return serviceProvider.GetRequiredService(); } // Version 16: Introduce file name slugs for assets. if (version < 16) { yield return serviceProvider.GetRequiredService(); } } // Version 13: Json refactoring if (version < 13) { yield return serviceProvider.GetRequiredService(); } yield return serviceProvider.GetRequiredService(); } } }