20 changed files with 166 additions and 487 deletions
@ -1,94 +0,0 @@ |
|||
using EShopOnAbp.AdministrationService.EntityFrameworkCore; |
|||
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations.EfCore; |
|||
using Serilog; |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DistributedLocking; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.PermissionManagement; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EShopOnAbp.AdministrationService.DbMigrations; |
|||
|
|||
public class AdministrationServiceDatabaseMigrationEventHandler |
|||
: DatabaseEfCoreMigrationEventHandler<AdministrationServiceDbContext>, |
|||
IDistributedEventHandler<ApplyDatabaseMigrationsEto> |
|||
{ |
|||
private readonly IPermissionDefinitionManager _permissionDefinitionManager; |
|||
private readonly IPermissionDataSeeder _permissionDataSeeder; |
|||
|
|||
public AdministrationServiceDatabaseMigrationEventHandler( |
|||
ICurrentTenant currentTenant, |
|||
IUnitOfWorkManager unitOfWorkManager, |
|||
ITenantStore tenantStore, |
|||
IPermissionDefinitionManager permissionDefinitionManager, |
|||
IPermissionDataSeeder permissionDataSeeder, |
|||
IDistributedEventBus distributedEventBus, |
|||
IAbpDistributedLock distributedLockProvider |
|||
) : base( |
|||
currentTenant, |
|||
unitOfWorkManager, |
|||
tenantStore, |
|||
distributedEventBus, |
|||
AdministrationServiceDbProperties.ConnectionStringName, |
|||
distributedLockProvider |
|||
) |
|||
{ |
|||
_permissionDefinitionManager = permissionDefinitionManager; |
|||
_permissionDataSeeder = permissionDataSeeder; |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData) |
|||
{ |
|||
if (eventData.DatabaseName != DatabaseName) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
try |
|||
{ |
|||
await using (var handle = await DistributedLockProvider.TryAcquireAsync(DatabaseName)) |
|||
{ |
|||
Log.Information("AdministrationService acquired lock for db migration and seeding..."); |
|||
|
|||
if (handle != null) |
|||
{ |
|||
await MigrateDatabaseSchemaAsync(); |
|||
await SeedDataAsync(); |
|||
} |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex); |
|||
} |
|||
} |
|||
|
|||
private async Task SeedDataAsync() |
|||
{ |
|||
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) |
|||
{ |
|||
var multiTenancySide = MultiTenancySides.Host; |
|||
|
|||
var permissionNames = _permissionDefinitionManager |
|||
.GetPermissions() |
|||
.Where(p => p.MultiTenancySide.HasFlag(multiTenancySide)) |
|||
.Where(p => !p.Providers.Any() || |
|||
p.Providers.Contains(RolePermissionValueProvider.ProviderName)) |
|||
.Select(p => p.Name) |
|||
.ToArray(); |
|||
|
|||
await _permissionDataSeeder.SeedAsync( |
|||
RolePermissionValueProvider.ProviderName, |
|||
"admin", |
|||
permissionNames |
|||
); |
|||
|
|||
await uow.CompleteAsync(); |
|||
} |
|||
} |
|||
} |
|||
@ -1,66 +0,0 @@ |
|||
using EShopOnAbp.CatalogService.MongoDB; |
|||
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations.MongoDb; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Serilog; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DistributedLocking; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EShopOnAbp.CatalogService.DbMigrations; |
|||
|
|||
public class CatalogServiceDatabaseMigrationEventHandler |
|||
: DatabaseMongoDbMigrationEventHandler<CatalogServiceMongoDbContext>, |
|||
IDistributedEventHandler<ApplyDatabaseMigrationsEto> |
|||
{ |
|||
public CatalogServiceDatabaseMigrationEventHandler( |
|||
ICurrentTenant currentTenant, |
|||
IUnitOfWorkManager unitOfWorkManager, |
|||
ITenantStore tenantStore, |
|||
IDistributedEventBus distributedEventBus, |
|||
IServiceProvider serviceProvider, |
|||
IAbpDistributedLock distributedLockProvider |
|||
) : base( |
|||
currentTenant, |
|||
unitOfWorkManager, |
|||
tenantStore, |
|||
distributedEventBus, |
|||
CatalogServiceDbProperties.ConnectionStringName, |
|||
serviceProvider, |
|||
distributedLockProvider) |
|||
{ |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData) |
|||
{ |
|||
if (eventData.DatabaseName != DatabaseName) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
if (eventData.TenantId != null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
try |
|||
{ |
|||
Log.Information("CatalogService has acquired lock for db migration..."); |
|||
|
|||
await using (var handle = await DistributedLockProvider.TryAcquireAsync(DatabaseName)) |
|||
{ |
|||
if (handle != null) |
|||
{ |
|||
Log.Information("CatalogService is migrating database..."); |
|||
await MigrateDatabaseSchemaAsync(); |
|||
} |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex); |
|||
} |
|||
} |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
using Volo.Abp.Domain.Entities.Events.Distributed; |
|||
using Volo.Abp.EventBus; |
|||
|
|||
namespace EShopOnAbp.IdentityService.DbMigrations; |
|||
|
|||
[EventName("abp.identity.apply_database_seeds")] |
|||
public class ApplyDatabaseSeedsEto : EtoBase |
|||
{ |
|||
} |
|||
@ -1,21 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.EventBus; |
|||
|
|||
namespace EShopOnAbp.IdentityService.DbMigrations; |
|||
|
|||
public class DataSeederEventHandler : ILocalEventHandler<ApplyDatabaseSeedsEto>, ITransientDependency |
|||
{ |
|||
protected IDataSeeder DataSeeder { get; } |
|||
|
|||
public DataSeederEventHandler(IDataSeeder dataSeeder) |
|||
{ |
|||
DataSeeder = dataSeeder; |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseSeedsEto eventData) |
|||
{ |
|||
await DataSeeder.SeedAsync(); |
|||
} |
|||
} |
|||
@ -1,90 +0,0 @@ |
|||
using EShopOnAbp.IdentityService.EntityFrameworkCore; |
|||
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations.EfCore; |
|||
using Serilog; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DistributedLocking; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.EventBus.Local; |
|||
using Volo.Abp.Identity; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EShopOnAbp.IdentityService.DbMigrations; |
|||
|
|||
public class IdentityServiceDatabaseMigrationEventHandler |
|||
: DatabaseEfCoreMigrationEventHandler<IdentityServiceDbContext>, |
|||
IDistributedEventHandler<ApplyDatabaseMigrationsEto> |
|||
{ |
|||
private readonly IIdentityDataSeeder _identityDataSeeder; |
|||
private readonly IdentityServerDataSeeder _identityServerDataSeeder; |
|||
private readonly ILocalEventBus _localEventBus; |
|||
|
|||
public IdentityServiceDatabaseMigrationEventHandler( |
|||
ICurrentTenant currentTenant, |
|||
IUnitOfWorkManager unitOfWorkManager, |
|||
ITenantStore tenantStore, |
|||
IIdentityDataSeeder identityDataSeeder, |
|||
IdentityServerDataSeeder identityServerDataSeeder, |
|||
IDistributedEventBus distributedEventBus, |
|||
ILocalEventBus localEventBus, |
|||
IAbpDistributedLock distributedLockProvider |
|||
) : base( |
|||
currentTenant, |
|||
unitOfWorkManager, |
|||
tenantStore, |
|||
distributedEventBus, |
|||
IdentityServiceDbProperties.ConnectionStringName, |
|||
distributedLockProvider) |
|||
{ |
|||
_identityDataSeeder = identityDataSeeder; |
|||
_identityServerDataSeeder = identityServerDataSeeder; |
|||
_localEventBus = localEventBus; |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData) |
|||
{ |
|||
if (eventData.DatabaseName != DatabaseName) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
try |
|||
{ |
|||
await using (var handle = await DistributedLockProvider.TryAcquireAsync(DatabaseName)) |
|||
{ |
|||
Log.Information("IdentityService has acquired lock for db migration..."); |
|||
|
|||
if (handle != null) |
|||
{ |
|||
Log.Information("IdentityService is migrating database..."); |
|||
await MigrateDatabaseSchemaAsync(); |
|||
Log.Information("IdentityService is seeding data..."); |
|||
await SeedDataAsync( |
|||
adminEmail: IdentityServiceDbProperties.DefaultAdminEmailAddress, |
|||
adminPassword: IdentityServiceDbProperties.DefaultAdminPassword |
|||
); |
|||
} |
|||
} |
|||
|
|||
await _localEventBus.PublishAsync(new ApplyDatabaseSeedsEto()); |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex); |
|||
} |
|||
} |
|||
|
|||
private async Task SeedDataAsync(string adminEmail, string adminPassword) |
|||
{ |
|||
Log.Information($"Seeding IdentityServer data..."); |
|||
await _identityServerDataSeeder.SeedAsync(); |
|||
|
|||
Log.Information($"Seeding user data..."); |
|||
await _identityDataSeeder.SeedAsync( |
|||
adminEmail, |
|||
adminPassword |
|||
); |
|||
} |
|||
} |
|||
@ -1,70 +0,0 @@ |
|||
using EShopOnAbp.OrderingService.EntityFrameworkCore; |
|||
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations.EfCore; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Serilog; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DistributedLocking; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EShopOnAbp.OrderingService.DbMigrations; |
|||
|
|||
public class OrderingServiceDatabaseMigrationEventHandler |
|||
: DatabaseEfCoreMigrationEventHandler<OrderingServiceDbContext>, |
|||
IDistributedEventHandler<ApplyDatabaseMigrationsEto> |
|||
{ |
|||
private readonly IDataSeeder _dataSeeder; |
|||
|
|||
public OrderingServiceDatabaseMigrationEventHandler( |
|||
ICurrentTenant currentTenant, |
|||
IUnitOfWorkManager unitOfWorkManager, |
|||
ITenantStore tenantStore, |
|||
IDistributedEventBus distributedEventBus, |
|||
IDataSeeder dataSeeder, |
|||
IAbpDistributedLock distributedLockProvider) |
|||
: base( |
|||
currentTenant, |
|||
unitOfWorkManager, |
|||
tenantStore, |
|||
distributedEventBus, |
|||
OrderingServiceDbProperties.ConnectionStringName, |
|||
distributedLockProvider) |
|||
{ |
|||
_dataSeeder = dataSeeder; |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData) |
|||
{ |
|||
if (eventData.DatabaseName != DatabaseName) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
if (eventData.TenantId != null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
try |
|||
{ |
|||
await using (var handle = await DistributedLockProvider.TryAcquireAsync(DatabaseName)) |
|||
{ |
|||
Log.Information("OrderingService has acquired lock for db migration..."); |
|||
|
|||
if (handle != null) |
|||
{ |
|||
Log.Information("OrderingService is migrating database..."); |
|||
await MigrateDatabaseSchemaAsync(); |
|||
Log.Information("OrderingService is seeding data..."); |
|||
await _dataSeeder.SeedAsync(); |
|||
} |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex); |
|||
} |
|||
} |
|||
} |
|||
@ -1,64 +0,0 @@ |
|||
using EShopOnAbp.PaymentService.EntityFrameworkCore; |
|||
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations.EfCore; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Serilog; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DistributedLocking; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EShopOnAbp.PaymentService.DbMigrations; |
|||
|
|||
public class PaymentServiceDatabaseMigrationEventHandler |
|||
: DatabaseEfCoreMigrationEventHandler<PaymentServiceDbContext>, |
|||
IDistributedEventHandler<ApplyDatabaseMigrationsEto> |
|||
{ |
|||
public PaymentServiceDatabaseMigrationEventHandler( |
|||
ICurrentTenant currentTenant, |
|||
IUnitOfWorkManager unitOfWorkManager, |
|||
ITenantStore tenantStore, |
|||
IDistributedEventBus distributedEventBus, |
|||
IAbpDistributedLock distributedLockProvider) |
|||
: base( |
|||
currentTenant, |
|||
unitOfWorkManager, |
|||
tenantStore, |
|||
distributedEventBus, |
|||
PaymentServiceDbProperties.ConnectionStringName, |
|||
distributedLockProvider) |
|||
{ |
|||
} |
|||
|
|||
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData) |
|||
{ |
|||
if (eventData.DatabaseName != DatabaseName) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
if (eventData.TenantId != null) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
try |
|||
{ |
|||
Log.Information("PaymentService has acquired lock for db migration..."); |
|||
|
|||
await using (var handle = await DistributedLockProvider.TryAcquireAsync(DatabaseName)) |
|||
{ |
|||
if (handle != null) |
|||
{ |
|||
Log.Information("PaymentService is migrating database..."); |
|||
await MigrateDatabaseSchemaAsync(); |
|||
} |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue