From 27a6b10edf14c1bc07dca3442e59f7444766378e Mon Sep 17 00:00:00 2001 From: "Amir.H Khademi" Date: Mon, 15 Apr 2024 21:01:40 +0330 Subject: [PATCH] feat : add new entites , befor add migration --- .../AppSettings/appsettings.Development.json | 9 ++ .../Configurations/ServiceExtensions.cs | 1 - NetinaShop.Common/NetinaShop.Common.csproj | 8 +- .../CoreServices/AccountService.cs | 8 +- NetinaShop.Core/EntityServices/UserService.cs | 22 +++-- .../Dtos/SmallDtos/CustomerSDto.cs | 20 ++++ .../Dtos/SmallDtos/ManagerSDto.cs | 21 ++++ .../Dtos/SmallDtos/MarketerSDto.cs | 22 +++++ NetinaShop.Domain/Entities/Orders/Order.cs | 2 +- .../Entities/Users/ApplicationUser.cs | 6 +- NetinaShop.Domain/Entities/Users/Customer.cs | 11 +++ NetinaShop.Domain/Entities/Users/Manager.cs | 11 +++ NetinaShop.Domain/Entities/Users/Marketer.cs | 12 +++ NetinaShop.Domain/Mappers/CustomerMapper.g.cs | 6 ++ NetinaShop.Domain/Mappers/ManagerMapper.g.cs | 98 +++++++++++++++++++ NetinaShop.Domain/Mappers/MarketerMapper.g.cs | 6 ++ NetinaShop.Domain/MapsterRegister.cs | 39 ++++++++ .../Models/Settings/SiteSettings.cs | 1 + NetinaShop.Domain/NetinaShop.Domain.csproj | 8 +- .../Models/ApplicationContext.cs | 3 +- .../Services/DbInitializerService.cs | 30 ++++-- 21 files changed, 313 insertions(+), 31 deletions(-) create mode 100644 NetinaShop.Domain/Dtos/SmallDtos/CustomerSDto.cs create mode 100644 NetinaShop.Domain/Dtos/SmallDtos/ManagerSDto.cs create mode 100644 NetinaShop.Domain/Dtos/SmallDtos/MarketerSDto.cs create mode 100644 NetinaShop.Domain/Entities/Users/Customer.cs create mode 100644 NetinaShop.Domain/Entities/Users/Manager.cs create mode 100644 NetinaShop.Domain/Entities/Users/Marketer.cs create mode 100644 NetinaShop.Domain/Mappers/CustomerMapper.g.cs create mode 100644 NetinaShop.Domain/Mappers/ManagerMapper.g.cs create mode 100644 NetinaShop.Domain/Mappers/MarketerMapper.g.cs diff --git a/NetinaShop.Api/AppSettings/appsettings.Development.json b/NetinaShop.Api/AppSettings/appsettings.Development.json index 0a9133a..b8fb720 100644 --- a/NetinaShop.Api/AppSettings/appsettings.Development.json +++ b/NetinaShop.Api/AppSettings/appsettings.Development.json @@ -31,6 +31,15 @@ "FirstName": "همه کاره", "LastName": "سیستم" }, + "Manager": { + "Username": "09128387004", + "Email": "mahanmasiha6@gmail.com", + "Password": "eF79o4P4BopCUbUK", + "Phone": "09128387004", + "RoleName": "Manager", + "FirstName": "ماهان", + "LastName": "" + }, "StorageSetting": { "AccessKey": "979313b7-30fb-40ff-94d8-d0390d3fa876", "SecretKey": "d37a1cc6acfea3a6f92c538ef0f6601f1edcdc9143942b6470e5d1032aa6bfe2", diff --git a/NetinaShop.Api/WebFramework/Configurations/ServiceExtensions.cs b/NetinaShop.Api/WebFramework/Configurations/ServiceExtensions.cs index 1c06520..4be0858 100644 --- a/NetinaShop.Api/WebFramework/Configurations/ServiceExtensions.cs +++ b/NetinaShop.Api/WebFramework/Configurations/ServiceExtensions.cs @@ -184,7 +184,6 @@ public static class ServiceExtensions }).AddEntityFrameworkStores() .AddDefaultTokenProviders() .AddErrorDescriber(); - ; } public static void AddCustomApiVersioning(this IServiceCollection serviceCollection) diff --git a/NetinaShop.Common/NetinaShop.Common.csproj b/NetinaShop.Common/NetinaShop.Common.csproj index dbe9777..7f66b1e 100644 --- a/NetinaShop.Common/NetinaShop.Common.csproj +++ b/NetinaShop.Common/NetinaShop.Common.csproj @@ -1,6 +1,6 @@  - + - + diff --git a/NetinaShop.Core/CoreServices/AccountService.cs b/NetinaShop.Core/CoreServices/AccountService.cs index 2a8b9c4..15db205 100644 --- a/NetinaShop.Core/CoreServices/AccountService.cs +++ b/NetinaShop.Core/CoreServices/AccountService.cs @@ -10,7 +10,7 @@ public class AccountService : IAccountService private readonly ICurrentUserService _currentUserService; private readonly IRepositoryWrapper _repositoryWrapper; private readonly ISmsService _smsService; - private readonly IUserService _userService; + private readonly IManagerUserService _managerUserService; public AccountService( UserManager userManager, @@ -19,7 +19,7 @@ public class AccountService : IAccountService ICurrentUserService currentUserService, IRepositoryWrapper repositoryWrapper, ISmsService smsService, - IUserService userService) + IManagerUserService managerUserService) { _userManager = userManager; _userSignInManager = userSignInManager; @@ -27,7 +27,7 @@ public class AccountService : IAccountService _currentUserService = currentUserService; _repositoryWrapper = repositoryWrapper; _smsService = smsService; - _userService = userService; + _managerUserService = managerUserService; } @@ -69,7 +69,7 @@ public class AccountService : IAccountService throw new AppException("شماره تلفن ارسالی اشتباه است"); var user = await _userManager.FindByNameAsync(newPhoneNumber); if (user == null) - user = await _userService.CreateUserAsync(phoneNumber); + user = await _managerUserService.CreateManagerAsync(phoneNumber); var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Phone"); await _smsService.SendVerifyCodeAsync(newPhoneNumber, token); diff --git a/NetinaShop.Core/EntityServices/UserService.cs b/NetinaShop.Core/EntityServices/UserService.cs index 0d57a28..81dc56d 100644 --- a/NetinaShop.Core/EntityServices/UserService.cs +++ b/NetinaShop.Core/EntityServices/UserService.cs @@ -7,16 +7,19 @@ public class UserService : IUserService private readonly UserManager _userManager; private readonly RoleManager _roleManager; private readonly IExternalFilesService _externalFilesService; + private readonly IRepositoryWrapper _repositoryWrapper; public UserService(ICurrentUserService currentUserService, UserManager userManager, RoleManager roleManager, - IExternalFilesService externalFilesService) + IExternalFilesService externalFilesService, + IRepositoryWrapper repositoryWrapper) { _currentUserService = currentUserService; _userManager = userManager; _roleManager = roleManager; _externalFilesService = externalFilesService; + _repositoryWrapper = repositoryWrapper; } @@ -258,14 +261,21 @@ public class UserService : IUserService if (user == null) throw new AppException("User NotFound", ApiResultStatusCode.NotFound); + var manager = await _repositoryWrapper.SetRepository() + .TableNoTracking + .FirstOrDefaultAsync(m => m.UserId == userId, cancellationToken); var currentVersion = await _externalFilesService.GetAdminChangeLogAsync(cancellationToken); - if (!(user.LatestVersionUsed < currentVersion.VersionNumber)) return currentVersion; - - currentVersion.IsNewVersion = true; - user.LatestVersionUsed = currentVersion.VersionNumber; - await _userManager.UpdateAsync(user); + if (manager != null) + { + if (!(manager.LatestVersionUsed < currentVersion.VersionNumber)) return currentVersion; + currentVersion.IsNewVersion = true; + manager.LatestVersionUsed = currentVersion.VersionNumber; + _repositoryWrapper.SetRepository() + .Update(manager); + await _repositoryWrapper.SaveChangesAsync(cancellationToken); + } return currentVersion; } diff --git a/NetinaShop.Domain/Dtos/SmallDtos/CustomerSDto.cs b/NetinaShop.Domain/Dtos/SmallDtos/CustomerSDto.cs new file mode 100644 index 0000000..e33ebe2 --- /dev/null +++ b/NetinaShop.Domain/Dtos/SmallDtos/CustomerSDto.cs @@ -0,0 +1,20 @@ +namespace NetinaShop.Domain.Dtos.SmallDtos; + +public class CustomerSDto : BaseDto +{ + public string PhoneNumber { get; set; } = string.Empty; + public string FirstName { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; + public DateTime BirthDate { get; set; } + public Gender Gender { get; set; } + public SignUpStatus SignUpStatus { get; set; } + public string NationalId { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + + + public string RoleName { get; set; } = string.Empty; + public string FullName => FirstName + " " + LastName; + + public List RoleIds { get; set; } = new(); + public long BirthDateTimeStamp => DateTimeExtensions.DateTimeToUnixTimeStamp(BirthDate); +} \ No newline at end of file diff --git a/NetinaShop.Domain/Dtos/SmallDtos/ManagerSDto.cs b/NetinaShop.Domain/Dtos/SmallDtos/ManagerSDto.cs new file mode 100644 index 0000000..fb42a34 --- /dev/null +++ b/NetinaShop.Domain/Dtos/SmallDtos/ManagerSDto.cs @@ -0,0 +1,21 @@ +namespace NetinaShop.Domain.Dtos.SmallDtos; + +public class ManagerSDto : BaseDto +{ + public string PhoneNumber { get; set; } = string.Empty; + public string FirstName { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; + public DateTime BirthDate { get; set; } + public Gender Gender { get; set; } + public SignUpStatus SignUpStatus { get; set; } + public string NationalId { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public double LatestVersionUsed { get; set; } + + + public string RoleName { get; set; } = string.Empty; + public string FullName => FirstName + " " + LastName; + + public List RoleIds { get; set; } = new(); + public long BirthDateTimeStamp => DateTimeExtensions.DateTimeToUnixTimeStamp(BirthDate); +} \ No newline at end of file diff --git a/NetinaShop.Domain/Dtos/SmallDtos/MarketerSDto.cs b/NetinaShop.Domain/Dtos/SmallDtos/MarketerSDto.cs new file mode 100644 index 0000000..523ab3f --- /dev/null +++ b/NetinaShop.Domain/Dtos/SmallDtos/MarketerSDto.cs @@ -0,0 +1,22 @@ +namespace NetinaShop.Domain.Dtos.SmallDtos; + +public class MarketerSDto : BaseDto +{ + public string PhoneNumber { get; set; } = string.Empty; + public string FirstName { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; + public DateTime BirthDate { get; set; } + public Gender Gender { get; set; } + public SignUpStatus SignUpStatus { get; set; } + public string NationalId { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string FatherName { get; set; } = string.Empty; + public string Shaba { get; set; } = string.Empty; + + + public string RoleName { get; set; } = string.Empty; + public string FullName => FirstName + " " + LastName; + + public List RoleIds { get; set; } = new(); + public long BirthDateTimeStamp => DateTimeExtensions.DateTimeToUnixTimeStamp(BirthDate); +} \ No newline at end of file diff --git a/NetinaShop.Domain/Entities/Orders/Order.cs b/NetinaShop.Domain/Entities/Orders/Order.cs index ba08587..f00e1ad 100644 --- a/NetinaShop.Domain/Entities/Orders/Order.cs +++ b/NetinaShop.Domain/Entities/Orders/Order.cs @@ -71,7 +71,7 @@ public partial class Order : ApiEntity public string DiscountCode { get; internal set; } = string.Empty; public Guid UserId { get; internal set; } - public ApplicationUser? User { get; internal set; } + public Customer? User { get; internal set; } public OrderDelivery? OrderDelivery { get; set; } diff --git a/NetinaShop.Domain/Entities/Users/ApplicationUser.cs b/NetinaShop.Domain/Entities/Users/ApplicationUser.cs index dba0e7c..ac0b2b1 100644 --- a/NetinaShop.Domain/Entities/Users/ApplicationUser.cs +++ b/NetinaShop.Domain/Entities/Users/ApplicationUser.cs @@ -10,11 +10,11 @@ public class ApplicationUser : IdentityUser public string LastName { get; set; } = string.Empty; public string NationalId { get; set; } = string.Empty; - public double LatestVersionUsed { get; set; } - public DateTime BirthDate { get; set; } public Gender Gender { get; set; } public SignUpStatus SignUpStatus { get; set; } - public List Addresses { get; set; } = new(); + public Manager? Manager { get; set; } + public Customer? Customer { get; set; } + public Marketer? Marketer { get; set; } } diff --git a/NetinaShop.Domain/Entities/Users/Customer.cs b/NetinaShop.Domain/Entities/Users/Customer.cs new file mode 100644 index 0000000..450454a --- /dev/null +++ b/NetinaShop.Domain/Entities/Users/Customer.cs @@ -0,0 +1,11 @@ +namespace NetinaShop.Domain.Entities.Users; + +[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] +[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] +[GenerateMapper] +public class Customer : ApiEntity +{ + public List Addresses { get; set; } = new(); + public Guid UserId { get; set; } + public ApplicationUser? User { get; set; } +} \ No newline at end of file diff --git a/NetinaShop.Domain/Entities/Users/Manager.cs b/NetinaShop.Domain/Entities/Users/Manager.cs new file mode 100644 index 0000000..0e87857 --- /dev/null +++ b/NetinaShop.Domain/Entities/Users/Manager.cs @@ -0,0 +1,11 @@ +namespace NetinaShop.Domain.Entities.Users; + +[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] +[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] +[GenerateMapper] +public class Manager : ApiEntity +{ + public double LatestVersionUsed { get; set; } + public Guid UserId { get; set; } + public ApplicationUser? User { get; set; } +} \ No newline at end of file diff --git a/NetinaShop.Domain/Entities/Users/Marketer.cs b/NetinaShop.Domain/Entities/Users/Marketer.cs new file mode 100644 index 0000000..15a06ab --- /dev/null +++ b/NetinaShop.Domain/Entities/Users/Marketer.cs @@ -0,0 +1,12 @@ +namespace NetinaShop.Domain.Entities.Users; + +[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget)] +[AdaptTo("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Projection)] +[GenerateMapper] +public class Marketer : ApiEntity +{ + public string FatherName { get; set; } = string.Empty; + public string Shaba { get; set; } = string.Empty; + public Guid UserId { get; set; } + public ApplicationUser? User { get; set; } +} \ No newline at end of file diff --git a/NetinaShop.Domain/Mappers/CustomerMapper.g.cs b/NetinaShop.Domain/Mappers/CustomerMapper.g.cs new file mode 100644 index 0000000..5ee9051 --- /dev/null +++ b/NetinaShop.Domain/Mappers/CustomerMapper.g.cs @@ -0,0 +1,6 @@ +namespace NetinaShop.Domain.Mappers +{ + public static partial class CustomerMapper + { + } +} \ No newline at end of file diff --git a/NetinaShop.Domain/Mappers/ManagerMapper.g.cs b/NetinaShop.Domain/Mappers/ManagerMapper.g.cs new file mode 100644 index 0000000..3f9e906 --- /dev/null +++ b/NetinaShop.Domain/Mappers/ManagerMapper.g.cs @@ -0,0 +1,98 @@ +using System; +using System.Linq.Expressions; +using NetinaShop.Domain.Dtos.SmallDtos; +using NetinaShop.Domain.Entities.Users; + +namespace NetinaShop.Domain.Mappers +{ + public static partial class ManagerMapper + { + public static Manager AdaptToManager(this ManagerSDto p1) + { + return p1 == null ? null : new Manager() + { + LatestVersionUsed = p1.LatestVersionUsed, + FirstName = p1.FirstName, + LastName = p1.LastName, + NationalId = p1.NationalId, + BirthDate = p1.BirthDate, + Gender = p1.Gender, + SignUpStatus = p1.SignUpStatus, + Id = p1.Id, + Email = p1.Email, + PhoneNumber = p1.PhoneNumber + }; + } + public static Manager AdaptTo(this ManagerSDto p2, Manager p3) + { + if (p2 == null) + { + return null; + } + Manager result = p3 ?? new Manager(); + + result.LatestVersionUsed = p2.LatestVersionUsed; + result.FirstName = p2.FirstName; + result.LastName = p2.LastName; + result.NationalId = p2.NationalId; + result.BirthDate = p2.BirthDate; + result.Gender = p2.Gender; + result.SignUpStatus = p2.SignUpStatus; + result.Id = p2.Id; + result.Email = p2.Email; + result.PhoneNumber = p2.PhoneNumber; + return result; + + } + public static ManagerSDto AdaptToSDto(this Manager p4) + { + return p4 == null ? null : new ManagerSDto() + { + PhoneNumber = p4.PhoneNumber, + FirstName = p4.FirstName, + LastName = p4.LastName, + BirthDate = p4.BirthDate, + Gender = p4.Gender, + SignUpStatus = p4.SignUpStatus, + NationalId = p4.NationalId, + Email = p4.Email, + LatestVersionUsed = p4.LatestVersionUsed, + Id = p4.Id + }; + } + public static ManagerSDto AdaptTo(this Manager p5, ManagerSDto p6) + { + if (p5 == null) + { + return null; + } + ManagerSDto result = p6 ?? new ManagerSDto(); + + result.PhoneNumber = p5.PhoneNumber; + result.FirstName = p5.FirstName; + result.LastName = p5.LastName; + result.BirthDate = p5.BirthDate; + result.Gender = p5.Gender; + result.SignUpStatus = p5.SignUpStatus; + result.NationalId = p5.NationalId; + result.Email = p5.Email; + result.LatestVersionUsed = p5.LatestVersionUsed; + result.Id = p5.Id; + return result; + + } + public static Expression> ProjectToSDto => p7 => new ManagerSDto() + { + PhoneNumber = p7.PhoneNumber, + FirstName = p7.FirstName, + LastName = p7.LastName, + BirthDate = p7.BirthDate, + Gender = p7.Gender, + SignUpStatus = p7.SignUpStatus, + NationalId = p7.NationalId, + Email = p7.Email, + LatestVersionUsed = p7.LatestVersionUsed, + Id = p7.Id + }; + } +} \ No newline at end of file diff --git a/NetinaShop.Domain/Mappers/MarketerMapper.g.cs b/NetinaShop.Domain/Mappers/MarketerMapper.g.cs new file mode 100644 index 0000000..a7fb682 --- /dev/null +++ b/NetinaShop.Domain/Mappers/MarketerMapper.g.cs @@ -0,0 +1,6 @@ +namespace NetinaShop.Domain.Mappers +{ + public static partial class MarketerMapper + { + } +} \ No newline at end of file diff --git a/NetinaShop.Domain/MapsterRegister.cs b/NetinaShop.Domain/MapsterRegister.cs index 4bfbc51..87ab647 100644 --- a/NetinaShop.Domain/MapsterRegister.cs +++ b/NetinaShop.Domain/MapsterRegister.cs @@ -79,5 +79,44 @@ public class MapsterRegister : IRegister .IgnoreNullValues(false) .TwoWays(); + ConfigUserMappers(config); + + } + + private void ConfigUserMappers(TypeAdapterConfig config) + { + + config.NewConfig() + .Map("PhoneNumber", o => o.User != null ? o.User.PhoneNumber : string.Empty) + .Map("FirstName", o => o.User != null ? o.User.FirstName : string.Empty) + .Map("LastName", o => o.User != null ? o.User.LastName : string.Empty) + .Map("BirthDate", o => o.User != null ? o.User.BirthDate : DateTime.MinValue) + .Map("Gender", o => o.User != null ? o.User.Gender : 0) + .Map("SignUpStatus", o => o.User != null ? o.User.SignUpStatus : 0) + .Map("NationalId", o => o.User != null ? o.User.NationalId : string.Empty) + .Map("Email", o => o.User != null ? o.User.Email : string.Empty) + .TwoWays(); + + config.NewConfig() + .Map("PhoneNumber", o => o.User != null ? o.User.PhoneNumber : string.Empty) + .Map("FirstName", o => o.User != null ? o.User.FirstName : string.Empty) + .Map("LastName", o => o.User != null ? o.User.LastName : string.Empty) + .Map("BirthDate", o => o.User != null ? o.User.BirthDate : DateTime.MinValue) + .Map("Gender", o => o.User != null ? o.User.Gender : 0) + .Map("SignUpStatus", o => o.User != null ? o.User.SignUpStatus : 0) + .Map("NationalId", o => o.User != null ? o.User.NationalId : string.Empty) + .Map("Email", o => o.User != null ? o.User.Email : string.Empty) + .TwoWays(); + + config.NewConfig() + .Map("PhoneNumber", o => o.User != null ? o.User.PhoneNumber : string.Empty) + .Map("FirstName", o => o.User != null ? o.User.FirstName : string.Empty) + .Map("LastName", o => o.User != null ? o.User.LastName : string.Empty) + .Map("BirthDate", o => o.User != null ? o.User.BirthDate : DateTime.MinValue) + .Map("Gender", o => o.User != null ? o.User.Gender : 0) + .Map("SignUpStatus", o => o.User != null ? o.User.SignUpStatus : 0) + .Map("NationalId", o => o.User != null ? o.User.NationalId : string.Empty) + .Map("Email", o => o.User != null ? o.User.Email : string.Empty) + .TwoWays(); } } \ No newline at end of file diff --git a/NetinaShop.Domain/Models/Settings/SiteSettings.cs b/NetinaShop.Domain/Models/Settings/SiteSettings.cs index 7ba8172..f183aa8 100644 --- a/NetinaShop.Domain/Models/Settings/SiteSettings.cs +++ b/NetinaShop.Domain/Models/Settings/SiteSettings.cs @@ -9,6 +9,7 @@ public class SiteSettings public string StorageBaseUrl { get; set; } = string.Empty; public RedisSettings MasterRedisConfiguration { get; set; } = new RedisSettings(); public UserSetting UserSetting { get; set; } = new UserSetting(); + public UserSetting Manager { get; set; } = new UserSetting(); public string KaveNegarApiKey { get; set; } = string.Empty; public StorageSettings StorageSetting { get; set; } = new StorageSettings(); } diff --git a/NetinaShop.Domain/NetinaShop.Domain.csproj b/NetinaShop.Domain/NetinaShop.Domain.csproj index 543800c..02d5cc0 100644 --- a/NetinaShop.Domain/NetinaShop.Domain.csproj +++ b/NetinaShop.Domain/NetinaShop.Domain.csproj @@ -1,6 +1,6 @@  - + - + diff --git a/NetinaShop.Repository/Models/ApplicationContext.cs b/NetinaShop.Repository/Models/ApplicationContext.cs index a8c06db..043f5c9 100644 --- a/NetinaShop.Repository/Models/ApplicationContext.cs +++ b/NetinaShop.Repository/Models/ApplicationContext.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; +using System.Reflection.Emit; namespace NetinaShop.Repository.Models; @@ -15,7 +16,6 @@ public class ApplicationContext : IdentityDbContext().ProjectAssembly; } - protected override void OnModelCreating(ModelBuilder builder) { var stopwatch = new Stopwatch(); @@ -31,6 +31,7 @@ public class ApplicationContext : IdentityDbContext _adminUserSeedOptions; private readonly ApplicationContext _context; private readonly ILogger _logger; + private readonly IRepositoryWrapper _repositoryWrapper; private readonly RoleManager _roleManager; private readonly UserManager _userManager; @@ -16,13 +17,15 @@ public class DbInitializerService : IDbInitializerService RoleManager roleManager, UserManager userManager, IOptionsSnapshot adminUserSeedOptions, - ILogger logger) + ILogger logger, + IRepositoryWrapper repositoryWrapper) { _context = context; _roleManager = roleManager; _userManager = userManager; _adminUserSeedOptions = adminUserSeedOptions; _logger = logger; + _repositoryWrapper = repositoryWrapper; } public void Initialize() @@ -44,6 +47,7 @@ public class DbInitializerService : IDbInitializerService { await SeedRoles(); var seedAdmin = _adminUserSeedOptions.Value.UserSetting; + var manager = _adminUserSeedOptions.Value.Manager; var user = await _userManager.FindByNameAsync(seedAdmin.Username); if (user == null) { @@ -61,26 +65,38 @@ public class DbInitializerService : IDbInitializerService BirthDate = DateTime.Now.AddYears(-23) }; var adminUserResult = await _userManager.CreateAsync(adminUser, seedAdmin.Password); + _repositoryWrapper.SetRepository() + .Add(new Manager + { + UserId = adminUser.Id + }); + await _repositoryWrapper.SaveChangesAsync(default); if (adminUserResult.Succeeded) await _userManager.AddToRoleAsync(adminUser, seedAdmin.RoleName); } - var mahanUser = await _userManager.FindByNameAsync("09128387004"); + var mahanUser = await _userManager.FindByNameAsync(manager.Username); if (mahanUser == null) { mahanUser = new ApplicationUser { - UserName = "09128387004", - Email = "mahanmasiha6@gmail.com", + UserName = manager.Username, + Email = manager.Email, EmailConfirmed = true, LockoutEnabled = true, - FirstName = "ماهان", - LastName = "", + FirstName = manager.FirstName, + LastName = manager.LastName, Gender = Gender.Male, PhoneNumberConfirmed = true, - PhoneNumber = "09128387004", + PhoneNumber = manager.Phone, BirthDate = DateTime.Now.AddYears(-23) }; var adminUserResult = await _userManager.CreateAsync(mahanUser, seedAdmin.Password); + _repositoryWrapper.SetRepository() + .Add(new Manager + { + UserId = mahanUser.Id + }); + await _repositoryWrapper.SaveChangesAsync(default); if (adminUserResult.Succeeded) await _userManager.AddToRoleAsync(mahanUser, "Manager"); } }