Api/Netina.Repository/Services/DbInitializerService.cs

251 lines
9.1 KiB
C#
Raw Permalink Normal View History

namespace Netina.Repository.Services;
2024-02-12 22:01:15 +03:30
public class DbInitializerService(
ApplicationContext context,
RoleManager<ApplicationRole> roleManager,
UserManager<ApplicationUser> userManager,
IOptionsSnapshot<SiteSettings> adminUserSeedOptions,
ILogger<DbInitializerService> logger,
IRepositoryWrapper repositoryWrapper)
: IDbInitializerService
2023-12-16 20:25:12 +03:30
{
public void Initialize()
{
try
{
context.Database.Migrate();
context.Database.ExecuteSqlRaw("CREATE EXTENSION IF NOT EXISTS pg_trgm");
logger.LogInformation("Migration SUCCESS !!!!");
2023-12-16 20:25:12 +03:30
}
catch (Exception e)
{
logger.LogError(e, e.Message);
2023-12-16 20:25:12 +03:30
}
}
public async Task SeedDate(bool force = false)
{
try
{
await SeedRoles();
var seedAdmin = adminUserSeedOptions.Value.UserSetting;
var manager = adminUserSeedOptions.Value.Manager;
var user = await userManager.FindByNameAsync(seedAdmin.Username);
2023-12-16 20:25:12 +03:30
if (user == null)
{
var adminUser = new ApplicationUser
{
UserName = seedAdmin.Username,
Email = seedAdmin.Email,
EmailConfirmed = true,
LockoutEnabled = true,
FirstName = seedAdmin.FirstName,
LastName = seedAdmin.LastName,
Gender = Gender.Male,
PhoneNumberConfirmed = true,
PhoneNumber = seedAdmin.Phone,
BirthDate = DateTime.Now.AddYears(-23)
};
var adminUserResult = await userManager.CreateAsync(adminUser, seedAdmin.Password);
repositoryWrapper.SetRepository<Manager>()
.Add(new Manager
{
UserId = adminUser.Id
});
await repositoryWrapper.SaveChangesAsync(default);
if (adminUserResult.Succeeded) await userManager.AddToRoleAsync(adminUser, seedAdmin.RoleName);
2023-12-16 20:25:12 +03:30
}
var mahanUser = await userManager.FindByNameAsync(manager.Username);
if (mahanUser == null)
{
mahanUser = new ApplicationUser
{
UserName = manager.Username,
Email = manager.Email,
EmailConfirmed = true,
LockoutEnabled = true,
FirstName = manager.FirstName,
LastName = manager.LastName,
Gender = Gender.Male,
PhoneNumberConfirmed = true,
PhoneNumber = manager.Phone,
BirthDate = DateTime.Now.AddYears(-23)
};
var adminUserResult = await userManager.CreateAsync(mahanUser, seedAdmin.Password);
repositoryWrapper.SetRepository<Manager>()
.Add(new Manager
{
UserId = mahanUser.Id
});
await repositoryWrapper.SaveChangesAsync(default);
if (adminUserResult.Succeeded) await userManager.AddToRoleAsync(mahanUser, "Manager");
}
2023-12-16 20:25:12 +03:30
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
public async Task SeedRoles()
{
var seedAdmin = adminUserSeedOptions.Value.UserSetting;
var rootRole = await roleManager.FindByNameAsync(seedAdmin.RoleName);
if (rootRole == null)
2023-12-16 20:25:12 +03:30
{
rootRole = new ApplicationRole
2023-12-16 20:25:12 +03:30
{
Name = seedAdmin.RoleName,
EnglishName = seedAdmin.RoleName,
Description = "root admin role"
};
var adminRoleResult = await roleManager.CreateAsync(rootRole);
foreach (var claim in ApplicationClaims.AllClaims)
await roleManager.AddClaimAsync(rootRole, claim);
}
2024-04-13 22:20:57 +03:30
else
{
foreach (var claim in ApplicationClaims.AllClaims)
{
var claims = await roleManager.GetClaimsAsync(rootRole);
2024-04-13 22:20:57 +03:30
if (claims.FirstOrDefault(c => c.Value == claim.Value) == null)
await roleManager.AddClaimAsync(rootRole, claim);
2024-04-13 22:20:57 +03:30
}
}
var managerRole = await roleManager.FindByNameAsync("Manager");
if (managerRole == null)
{
managerRole = new ApplicationRole
{
Name = "Manager",
EnglishName = "Manager",
PersianName = "مدیریتـــ",
Description = "admin role"
};
var adminRoleResult = await roleManager.CreateAsync(managerRole);
2023-12-16 20:25:12 +03:30
foreach (var claim in ApplicationClaims.AllClaims)
await roleManager.AddClaimAsync(managerRole, claim);
2023-12-16 20:25:12 +03:30
}
2024-04-13 22:20:57 +03:30
else
{
foreach (var claim in ApplicationClaims.AllClaims)
{
var claims = await roleManager.GetClaimsAsync(managerRole);
2024-04-13 22:20:57 +03:30
if (claims.FirstOrDefault(c => c.Value == claim.Value) == null)
await roleManager.AddClaimAsync(managerRole, claim);
2024-04-13 22:20:57 +03:30
}
}
2023-12-16 20:25:12 +03:30
var customerRole = await roleManager.FindByNameAsync("Customer");
2023-12-16 20:25:12 +03:30
if (customerRole == null)
{
customerRole = new ApplicationRole
{
Name = "Customer",
PersianName = "مشتری",
2023-12-16 20:25:12 +03:30
EnglishName = "Customer",
};
var customerRoleResult = await roleManager.CreateAsync(customerRole);
2023-12-16 20:25:12 +03:30
foreach (var claim in ApplicationClaims.CustomerClaims)
await roleManager.AddClaimAsync(customerRole, claim);
2023-12-16 20:25:12 +03:30
}
2024-04-13 22:20:57 +03:30
else
{
foreach (var claim in ApplicationClaims.CustomerClaims)
{
var claims = await roleManager.GetClaimsAsync(customerRole);
2024-04-13 22:20:57 +03:30
if (claims.FirstOrDefault(c => c.Value == claim.Value) == null)
await roleManager.AddClaimAsync(customerRole, claim);
2024-04-13 22:20:57 +03:30
}
}
2023-12-16 20:25:12 +03:30
}
public async Task Refactor()
{
//var noSlugProducts = await _repositoryWrapper.SetRepository<Product>()
// .TableNoTracking
// .Where(p => p.Slug == string.Empty)
// .ToListAsync();
//if (noSlugProducts.Count > 0)
//{
// noSlugProducts.ForEach(p =>
// {
// var slug = StringExtensions.GetSlug(p.PersianName);
// p.Slug = slug;
// });
// _repositoryWrapper.SetRepository<Product>()
// .UpdateRange(noSlugProducts);
// await _repositoryWrapper.SaveChangesAsync();
//}
//var noSlugProductCategories = await _repositoryWrapper.SetRepository<ProductCategory>()
// .TableNoTracking
// .Where(pc => pc.Slug == string.Empty)
// .ToListAsync();
//if (noSlugProductCategories.Count > 0)
//{
// noSlugProductCategories.ForEach(p =>
// {
// var slug = StringExtensions.GetSlug(p.Name);
// p.Slug = slug;
// });
// _repositoryWrapper.SetRepository<ProductCategory>()
// .UpdateRange(noSlugProductCategories);
// await _repositoryWrapper.SaveChangesAsync();
//}
//var notSlugBrands = await _repositoryWrapper.SetRepository<Brand>()
// .TableNoTracking
// .Where(pc => pc.Slug == string.Empty)
// .ToListAsync();
//if (notSlugBrands.Count > 0)
//{
// notSlugBrands.ForEach(p =>
// {
// var slug = StringExtensions.GetSlug(p.PersianName);
// p.Slug = slug;
// });
// _repositoryWrapper.SetRepository<Brand>()
// .UpdateRange(notSlugBrands);
// await _repositoryWrapper.SaveChangesAsync();
//}
//var noSlugBlogs = await _repositoryWrapper.SetRepository<Blog>()
// .TableNoTracking
// .Where(pc => pc.Slug == string.Empty)
// .ToListAsync();
//if (noSlugBlogs.Count > 0)
//{
// noSlugBlogs.ForEach(p =>
// {
// var slug = StringExtensions.GetSlug(p.Title);
// p.Slug = slug;
// });
// _repositoryWrapper.SetRepository<Blog>()
// .UpdateRange(noSlugBlogs);
// await _repositoryWrapper.SaveChangesAsync();
//}
//var noSlugBogCategories = await _repositoryWrapper.SetRepository<BlogCategory>()
// .TableNoTracking
// .Where(pc => pc.Slug == string.Empty)
// .ToListAsync();
//if (noSlugBogCategories.Count > 0)
//{
// noSlugBogCategories.ForEach(p =>
// {
// var slug = StringExtensions.GetSlug(p.Name);
// p.Slug = slug;
// });
// _repositoryWrapper.SetRepository<BlogCategory>()
// .UpdateRange(noSlugBogCategories);
// await _repositoryWrapper.SaveChangesAsync();
//}
}
2023-12-16 20:25:12 +03:30
}