Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/Common/uBeac.Core.Common/IDataSeeder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace uBeac;

public interface IDataSeeder
{
Task SeedAsync(CancellationToken cancellationToken = default);
}
2 changes: 2 additions & 0 deletions src/Examples/Identity.MongoDB.API/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@

var app = builder.Build();

app.SeedData();

app.UseHttpsRedirection();
app.UseHstsOnProduction(builder.Environment);
app.UseCorsPolicy(corsPolicyOptions);
Expand Down
59 changes: 14 additions & 45 deletions src/Identity/uBeac.Core.Identity/Extensions/RoleExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.AspNetCore.Identity;
using uBeac;
using uBeac.Identity;
using uBeac.Identity.Seeders;

namespace Microsoft.Extensions.DependencyInjection;

Expand Down Expand Up @@ -35,12 +37,10 @@ public static IdentityBuilder AddIdentityRole<TRoleKey, TRole>(this IdentityBuil
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterRoleOptions(configureOptions);
builder.Services.RegisterRoleOptions(configureOptions);

// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IRoleService<TRoleKey, TRole>>()
.InsertDefaultRoles(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, RoleSeeder<TRoleKey, TRole>>();
}

return builder;
Expand All @@ -49,7 +49,6 @@ public static IdentityBuilder AddIdentityRole<TRoleKey, TRole>(this IdentityBuil
public static IdentityBuilder AddIdentityRole<TRole>(this IdentityBuilder builder, Action<RoleOptions<TRole>> configureOptions = default)
where TRole : Role
{

// Configure AspNetIdentity
builder
.AddRoles<TRole>()
Expand All @@ -59,12 +58,10 @@ public static IdentityBuilder AddIdentityRole<TRole>(this IdentityBuilder builde
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterRoleOptions(configureOptions);

builder.Services.RegisterRoleOptions(configureOptions);
// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IRoleService<TRole>>()
.InsertDefaultRoles(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, RoleSeeder<TRole>>();
}

return builder;
Expand All @@ -74,12 +71,12 @@ private static RoleOptions<TRoleKey, TRole> RegisterRoleOptions<TRoleKey, TRole>
where TRoleKey : IEquatable<TRoleKey>
where TRole : Role<TRoleKey>
{
var options = new RoleOptions<TRoleKey, TRole>();
configureOptions(options);

// Register IOptions<RoleOptions<,>>
services.Configure(configureOptions);

// Get RoleOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<RoleOptions<TRoleKey, TRole>>>().Value;

// Register RoleOptions<,> without IOptions
services.AddSingleton<RoleOptions<TRoleKey, TRole>>(options);

Expand All @@ -89,43 +86,15 @@ private static RoleOptions<TRoleKey, TRole> RegisterRoleOptions<TRoleKey, TRole>
private static RoleOptions<TRole> RegisterRoleOptions<TRole>(this IServiceCollection services, Action<RoleOptions<TRole>> configureOptions)
where TRole : Role
{
var options = new RoleOptions<TRole>();
configureOptions(options);

// Register IOptions<RoleOptions<,>>
services.Configure(configureOptions);

// Get RoleOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<RoleOptions<TRole>>>().Value;

// Register RoleOptions<,> without IOptions
services.AddSingleton<RoleOptions<TRole>>(options);

return options;
}

private static void InsertDefaultRoles<TRoleKey, TRole>(this IRoleService<TRoleKey, TRole> service, IEnumerable<TRole> values)
where TRoleKey : IEquatable<TRoleKey>
where TRole : Role<TRoleKey>
{
if (values is null || values.Any() is false) return;
foreach (var role in values)
{
try
{
// If role was not inserted before, insert it
if (service.Exists(role.Name).Result is false)
{
service.Create(role).Wait();
}
}
catch (Exception)
{
// ignored
}
}
}

private static void InsertDefaultRoles<TRole>(this IRoleService<TRole> service, IEnumerable<TRole> values)
where TRole : Role
{
service.InsertDefaultRoles<Guid, TRole>(values);
}
}
}
67 changes: 15 additions & 52 deletions src/Identity/uBeac.Core.Identity/Extensions/UnitExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.AspNetCore.Identity;
using uBeac;
using uBeac.Identity;
using uBeac.Identity.Seeders;

namespace Microsoft.Extensions.DependencyInjection;

Expand Down Expand Up @@ -29,12 +31,10 @@ public static IdentityBuilder AddIdentityUnit<TUnitKey, TUnit>(this IdentityBuil
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterUnitOptions(configureOptions);
builder.Services.RegisterUnitOptions(configureOptions);

// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IUnitService<TUnitKey, TUnit>>()
.InsertDefaultUnits(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, UnitSeeder<TUnitKey, TUnit>>();
}

return builder;
Expand All @@ -46,12 +46,10 @@ public static IdentityBuilder AddIdentityUnit<TUnit>(this IdentityBuilder builde
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterUnitOptions(configureOptions);
builder.Services.RegisterUnitOptions(configureOptions);

// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IUnitService<TUnit>>()
.InsertDefaultUnits(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, UnitSeeder<TUnit>>();
}

return builder;
Expand All @@ -61,12 +59,12 @@ private static UnitOptions<TUnitKey, TUnit> RegisterUnitOptions<TUnitKey, TUnit>
where TUnitKey : IEquatable<TUnitKey>
where TUnit : Unit<TUnitKey>
{
var options = new UnitOptions<TUnitKey, TUnit>();
configureOptions(options);

// Register IOptions<UnitOptions<,>>
services.Configure(configureOptions);

// Get UnitOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<UnitOptions<TUnitKey, TUnit>>>().Value;


// Register UnitOptions<,> without IOptions
services.AddSingleton<UnitOptions<TUnitKey, TUnit>>(options);

Expand All @@ -76,50 +74,15 @@ private static UnitOptions<TUnitKey, TUnit> RegisterUnitOptions<TUnitKey, TUnit>
private static UnitOptions<TUnit> RegisterUnitOptions<TUnit>(this IServiceCollection services, Action<UnitOptions<TUnit>> configureOptions)
where TUnit : Unit
{
var options = new UnitOptions<TUnit>();
configureOptions(options);

// Register IOptions<UnitOptions<,>>
services.Configure(configureOptions);

// Get UnitOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<UnitOptions<TUnit>>>().Value;


// Register UnitOptions<,> without IOptions
services.AddSingleton<UnitOptions<TUnit>>(options);

return options;
}

private static void InsertDefaultUnits<TUnitKey, TUnit>(this IUnitService<TUnitKey, TUnit> service, IEnumerable<TUnit> values)
where TUnitKey : IEquatable<TUnitKey>
where TUnit : Unit<TUnitKey>
{
if (values is null || values.Any() is false) return;

// Insert default values
foreach (var unit in values)
{
try
{
// If unit was not inserted before, insert it
if (service.Exists(unit.Code, unit.Type).Result is false)
{
// Set parent id
var parent = unit.GetParentUnit();
if (parent != null) unit.ParentUnitId = parent.Id;

// Insert
service.Create(unit).Wait();
}
}
catch (Exception)
{
// ignored
}
}
}

private static void InsertDefaultUnits<TUnit>(this IUnitService<TUnit> service, IEnumerable<TUnit> values)
where TUnit : Unit
{
service.InsertDefaultUnits<Guid, TUnit>(values);
}
}
}
54 changes: 12 additions & 42 deletions src/Identity/uBeac.Core.Identity/Extensions/UnitTypeExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.AspNetCore.Identity;
using uBeac;
using uBeac.Identity;
using uBeac.Identity.Seeders;

namespace Microsoft.Extensions.DependencyInjection;

Expand Down Expand Up @@ -29,12 +31,10 @@ public static IdentityBuilder AddIdentityUnitType<TUnitTypeKey, TUnitType>(this
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterUnitTypeOptions(configureOptions);
builder.Services.RegisterUnitTypeOptions(configureOptions);

// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IUnitTypeService<TUnitTypeKey, TUnitType>>()
.InsertDefaultUnitTypes(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, UnitTypeSeeder<TUnitTypeKey, TUnitType>>();
}

return builder;
Expand All @@ -46,12 +46,10 @@ public static IdentityBuilder AddIdentityUnitType<TUnitType>(this IdentityBuilde
if (configureOptions is not null)
{
// Register options
var options = builder.Services.RegisterUnitTypeOptions(configureOptions);
builder.Services.RegisterUnitTypeOptions(configureOptions);

// Insert default values
builder.Services.BuildServiceProvider().CreateScope().ServiceProvider
.GetRequiredService<IUnitTypeService<TUnitType>>()
.InsertDefaultUnitTypes(options.DefaultValues);
builder.Services.AddScoped<IDataSeeder, UnitTypeSeeder<TUnitType>>();
}

return builder;
Expand All @@ -61,12 +59,12 @@ private static UnitTypeOptions<TUnitTypeKey, TUnitType> RegisterUnitTypeOptions<
where TUnitTypeKey : IEquatable<TUnitTypeKey>
where TUnitType : UnitType<TUnitTypeKey>
{
var options = new UnitTypeOptions<TUnitTypeKey, TUnitType>();
configureOptions(options);

// Register IOptions<UnitTypeOptions<,>>
services.Configure(configureOptions);

// Get UnitTypeOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<UnitTypeOptions<TUnitTypeKey, TUnitType>>>().Value;

// Register UnitTypeOptions<,> without IOptions
services.AddSingleton<UnitTypeOptions<TUnitTypeKey, TUnitType>>(options);

Expand All @@ -76,43 +74,15 @@ private static UnitTypeOptions<TUnitTypeKey, TUnitType> RegisterUnitTypeOptions<
private static UnitTypeOptions<TUnitType> RegisterUnitTypeOptions<TUnitType>(this IServiceCollection services, Action<UnitTypeOptions<TUnitType>> configureOptions)
where TUnitType : UnitType
{
var options = new UnitTypeOptions<TUnitType>();
configureOptions(options);

// Register IOptions<UnitTypeOptions<,>>
services.Configure(configureOptions);

// Get UnitTypeOptions<,> from ServiceProvider
var options = services.BuildServiceProvider().GetRequiredService<Options.IOptions<UnitTypeOptions<TUnitType>>>().Value;

// Register UnitTypeOptions<,> without IOptions
services.AddSingleton<UnitTypeOptions<TUnitType>>(options);

return options;
}

private static void InsertDefaultUnitTypes<TUnitTypeKey, TUnitType>(this IUnitTypeService<TUnitTypeKey, TUnitType> service, IEnumerable<TUnitType> values)
where TUnitTypeKey : IEquatable<TUnitTypeKey>
where TUnitType : UnitType<TUnitTypeKey>
{
if (values is null || values.Any() is false) return;
foreach (var unitType in values)
{
try
{
// If unit type was not inserted before, insert it
if (service.Exists(unitType.Code).Result is false)
{
service.Create(unitType).Wait();
}
}
catch (Exception)
{
// ignored
}
}
}

private static void InsertDefaultUnitTypes<TUnitType>(this IUnitTypeService<TUnitType> service, IEnumerable<TUnitType> values)
where TUnitType : UnitType
{
service.InsertDefaultUnitTypes<Guid, TUnitType>(values);
}
}
Loading