diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 7e1fe31..aa98615 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -32,6 +32,38 @@ namespace AyCode.Database.DataLayers.Users public TUser? GetUserByEmail(string email) => Session(x => x.GetUserByEmail(email)); public Task GetUserByEmailAsync(string email) => SessionAsync(x => x.GetUserByEmail(email)); + public Task AddUser(TUser user, string profileName, TProfileAddress address) + { + return TransactionAsync(ctx => + { + var profile = Activator.CreateInstance(); + + profile.Id = Guid.NewGuid(); + profile.Name = profileName; + profile.Address = address; + + user.Profile= profile; + + if (ctx.AddUser(user)) return false; + + ctx.SaveChanges(); + + return true; + }); + } + + public Task AddUser(TUser user) + { + return TransactionAsync(ctx => + { + if (ctx.AddUser(user)) return false; + + ctx.SaveChanges(); + + return true; + }); + } + //public UserToken CreateUserToken(Guid userId, string verificationToken) //{ // UserToken userToken = null; diff --git a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs index cc4e9c7..e64b367 100644 --- a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs +++ b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs @@ -1,5 +1,6 @@ using AyCode.Core.Logger; using AyCode.Entities.Users; +using AyCode.Interfaces.Entities; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.Users; @@ -23,4 +24,25 @@ public static class AcUserDbSetExtensions var emailLower = email.ToLower(); return ctx.Users.Where(u => u.EmailAddress == emailLower); } + + public static bool AddUser(this IAcUserDbSetBase ctx, TUser user) where TUser : class, IAcUserBase + { + var emailLower = user.EmailAddress.ToLower(); + + Logger.Info($"GetUserByEmail: {emailLower}"); + + return ctx.Users.Add(user).State == Microsoft.EntityFrameworkCore.EntityState.Added; + } + + public static bool RemoveUserAsync(this IAcUserDbSetBase ctx, TUser user) where TUser : class, IAcUserBase + => ctx.Users.Remove(user).State == Microsoft.EntityFrameworkCore.EntityState.Deleted; + + public static bool RemoveUserAsync(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase + { + var user = ctx.GetUserById(userId); + + if (user == null) return false; + + return ctx.RemoveUserAsync(user); + } } \ No newline at end of file diff --git a/AyCode.Database/ModelBuilders/Profiles/AcProfileEntityTypeBuilderExtensions.cs b/AyCode.Database/ModelBuilders/Profiles/AcProfileEntityTypeBuilderExtensions.cs index 60828d7..727f2cc 100644 --- a/AyCode.Database/ModelBuilders/Profiles/AcProfileEntityTypeBuilderExtensions.cs +++ b/AyCode.Database/ModelBuilders/Profiles/AcProfileEntityTypeBuilderExtensions.cs @@ -1,4 +1,5 @@ using AyCode.Interfaces.Addresses; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace AyCode.Database.ModelBuilders.Profiles; @@ -10,6 +11,8 @@ public static class AcProfileEntityTypeBuilderExtensions where TAddress : class, IAcAddress { //modelBuilder.HasOne(e => e.Address).WithOne().HasForeignKey(e => e.AddressId); - modelBuilder.Navigation(e => e.Address).AutoInclude(autoInclude); + + modelBuilder.HasOne(x => x.Address).WithOne().OnDelete(DeleteBehavior.Cascade); + modelBuilder.Navigation(e => e.Address).AutoInclude(autoInclude).IsRequired(); } } \ No newline at end of file diff --git a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs index 83cbbb9..67d3590 100644 --- a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs +++ b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs @@ -15,7 +15,8 @@ public static class AcUserEntityTypeBuilderExtensions where TProfileRelation : class, IAcProfileRelation where TProfile : class, IAcProfileDtoBase { - modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude); + modelBuilder.HasOne(x => x.Profile).WithOne().OnDelete(DeleteBehavior.Cascade); + modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude).IsRequired(); } public static void BuildEntityToServiceProviderRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true)