diff --git a/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs b/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs index 242eebd..d1583a5 100644 --- a/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs +++ b/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs @@ -10,32 +10,32 @@ namespace UserService.DatabaseLayer.DataModels public static void Seed(this ModelBuilder modelBuilder) { if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder)); - var groups = new OrganizationUnit { CommonName = "Groups", Id = -1 }; - var users = new OrganizationUnit { CommonName = "Users", Id = -2 }; - var germany = new OrganizationUnit{CommonName = "Germany", Id = -6, ParentId = -2}; - var usa = new OrganizationUnit{CommonName = "USA", Id = -5, ParentId = -2}; - var arizona = new OrganizationUnit{CommonName = "Arizona" , Id = -4, ParentId = -5 }; - var france = new OrganizationUnit{CommonName = "France" , Id = -3, ParentId = -2 }; + var groups = new OrganizationUnit { CommonName = "Groups", Id = Guid.NewGuid() }; + var users = new OrganizationUnit { CommonName = "Users", Id = Guid.NewGuid() }; + var germany = new OrganizationUnit { CommonName = "Germany", Id = Guid.NewGuid(), ParentId = users.Id }; + var usa = new OrganizationUnit { CommonName = "USA", Id = Guid.NewGuid(), ParentId = users.Id }; + var arizona = new OrganizationUnit { CommonName = "Arizona", Id = Guid.NewGuid(), ParentId = usa.Id }; + var france = new OrganizationUnit { CommonName = "France", Id = Guid.NewGuid(), ParentId = users.Id }; modelBuilder.Entity().HasData(users, groups, germany, usa, arizona, france); - var user = new User { CommonName = Environment.UserName, IsActive = true, Id = -7, ParentId = users.Id }; + var user = new User { CommonName = Environment.UserName, IsActive = true, Id = Guid.NewGuid(), ParentId = users.Id }; modelBuilder.Entity().HasData(user); - var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = -8, ParentId = groups.Id }; + var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = Guid.NewGuid(), ParentId = groups.Id }; modelBuilder.Entity().HasData(secGroup); - modelBuilder.Entity() - .HasData(new UserMember { MemberId = secGroup.Id, UserId = user.Id }); + modelBuilder.Entity() + .HasData(new MembersMember { MemberId = secGroup.Id, AttachedMemberId = user.Id }); } public static void CreateRelations(this ModelBuilder modelBuilder) { if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder)); - modelBuilder.Entity() - .HasKey(bc => new { bc.MemberId, bc.UserId }); - modelBuilder.Entity() - .HasOne(bc => bc.User) + modelBuilder.Entity() + .HasKey(bc => new { bc.MemberId, AttachedMemberId = bc.AttachedMemberId }); + modelBuilder.Entity() + .HasOne(bc => bc.AttachedMember) .WithMany(b => b!.MemberOf) - .HasForeignKey(bc => bc.UserId); - modelBuilder.Entity() + .HasForeignKey(bc => bc.AttachedMemberId); + modelBuilder.Entity() .HasOne(bc => bc.Member) .WithMany(c => c!.Members) .HasForeignKey(bc => bc.MemberId); @@ -64,13 +64,13 @@ namespace UserService.DatabaseLayer.DataModels public static class SecurityGroupExtensions { - public static IEnumerable GetUsers(this SecurityGroup securityGroup) + public static IEnumerable GetAttachedMembers(this SecurityGroup securityGroup) { if (securityGroup == null) throw new ArgumentNullException(nameof(securityGroup)); foreach (var userMember in securityGroup.Members) { - if (userMember.User is null) continue; - yield return userMember.User; + if (userMember.AttachedMember is null) continue; + yield return userMember.AttachedMember; } } diff --git a/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs b/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs index cd9e5d8..6d0cf38 100644 --- a/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs +++ b/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs @@ -7,7 +7,7 @@ namespace UserService.DatabaseLayer.DataModels { public DbSet Users { get; set; } = null!; public DbSet SecurityGroups { get; set; } = null!; - public DbSet UserMembers { get; set; } = null!; + public DbSet UserMembers { get; set; } = null!; public DbSet OrganizationUnits { get; set; } = null!; protected override void OnConfiguring(DbContextOptionsBuilder options) diff --git a/UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.Designer.cs b/UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.Designer.cs similarity index 72% rename from UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.Designer.cs rename to UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.Designer.cs index 315dc82..0bf84dd 100644 --- a/UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.Designer.cs +++ b/UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.Designer.cs @@ -9,7 +9,7 @@ using UserService.DatabaseLayer.DataModels; namespace UserService.DatabaseLayer.Migrations { [DbContext(typeof(UserServiceDbContext))] - [Migration("20200821193933_InitialCreate")] + [Migration("20200906191545_InitialCreate")] partial class InitialCreate { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -18,11 +18,33 @@ namespace UserService.DatabaseLayer.Migrations modelBuilder .HasAnnotation("ProductVersion", "3.1.7"); + modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b => + { + b.Property("MemberId") + .HasColumnType("TEXT"); + + b.Property("AttachedMemberId") + .HasColumnType("TEXT"); + + b.HasKey("MemberId", "AttachedMemberId"); + + b.HasIndex("AttachedMemberId"); + + b.ToTable("UserMembers"); + + b.HasData( + new + { + MemberId = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), + AttachedMemberId = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269") + }); + }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => { - b.Property("Id") + b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + .HasColumnType("TEXT"); b.Property("CommonName") .IsRequired() @@ -35,8 +57,8 @@ namespace UserService.DatabaseLayer.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("ParentId") - .HasColumnType("INTEGER"); + b.Property("ParentId") + .HasColumnType("TEXT"); b.HasKey("Id"); @@ -47,35 +69,10 @@ namespace UserService.DatabaseLayer.Migrations b.HasDiscriminator("Discriminator").HasValue("Node"); }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b => - { - b.Property("MemberId") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("MemberId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("UserMembers"); - - b.HasData( - new - { - MemberId = -8, - UserId = -7 - }); - }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b => { b.HasBaseType("UserService.Infrastructure.DataModels.Node"); - b.Property("EMail") - .HasColumnType("TEXT"); - b.HasDiscriminator().HasValue("Member"); }); @@ -83,8 +80,8 @@ namespace UserService.DatabaseLayer.Migrations { b.HasBaseType("UserService.Infrastructure.DataModels.Node"); - b.Property("ManagerId") - .HasColumnType("INTEGER"); + b.Property("ManagerId") + .HasColumnType("TEXT"); b.HasIndex("ManagerId"); @@ -93,37 +90,37 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -2, + Id = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), CommonName = "Users" }, new { - Id = -1, + Id = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"), CommonName = "Groups" }, new { - Id = -6, + Id = new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"), CommonName = "Germany", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }, new { - Id = -5, + Id = new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), CommonName = "USA", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }, new { - Id = -4, + Id = new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"), CommonName = "Arizona", - ParentId = -5 + ParentId = new Guid("cecbf557-59cc-475c-b136-02da39aa4911") }, new { - Id = -3, + Id = new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"), CommonName = "France", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }); }); @@ -136,9 +133,9 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -8, + Id = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), CommonName = "Global Admin", - ParentId = -1 + ParentId = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913") }); }); @@ -146,6 +143,9 @@ namespace UserService.DatabaseLayer.Migrations { b.HasBaseType("UserService.Infrastructure.DataModels.Member"); + b.Property("EMail") + .HasColumnType("TEXT"); + b.Property("FirstName") .HasColumnType("TEXT"); @@ -160,13 +160,28 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -7, + Id = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"), CommonName = "holger", - ParentId = -2, + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), IsActive = true }); }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b => + { + b.HasOne("UserService.Infrastructure.DataModels.Member", "AttachedMember") + .WithMany("MemberOf") + .HasForeignKey("AttachedMemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UserService.Infrastructure.DataModels.Member", "Member") + .WithMany("Members") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => { b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent") @@ -174,21 +189,6 @@ namespace UserService.DatabaseLayer.Migrations .HasForeignKey("ParentId"); }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b => - { - b.HasOne("UserService.Infrastructure.DataModels.Member", "Member") - .WithMany("Members") - .HasForeignKey("MemberId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("UserService.Infrastructure.DataModels.User", "User") - .WithMany("MemberOf") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b => { b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager") diff --git a/UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.cs b/UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.cs similarity index 66% rename from UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.cs rename to UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.cs index 47c7b27..7c248c1 100644 --- a/UserService.DatabaseLayer/Migrations/20200821193933_InitialCreate.cs +++ b/UserService.DatabaseLayer/Migrations/20200906191545_InitialCreate.cs @@ -1,4 +1,5 @@ -using Microsoft.EntityFrameworkCore.Migrations; +using System; +using Microsoft.EntityFrameworkCore.Migrations; namespace UserService.DatabaseLayer.Migrations { @@ -10,17 +11,16 @@ namespace UserService.DatabaseLayer.Migrations name: "Node", columns: table => new { - Id = table.Column(nullable: false) - .Annotation("Sqlite:Autoincrement", true), + Id = table.Column(nullable: false), CommonName = table.Column(nullable: false), Description = table.Column(nullable: true), - ParentId = table.Column(nullable: true), + ParentId = table.Column(nullable: true), Discriminator = table.Column(nullable: false), - EMail = table.Column(nullable: true), FirstName = table.Column(nullable: true), LastName = table.Column(nullable: true), IsActive = table.Column(nullable: true), - ManagerId = table.Column(nullable: true) + EMail = table.Column(nullable: true), + ManagerId = table.Column(nullable: true) }, constraints: table => { @@ -43,21 +43,21 @@ namespace UserService.DatabaseLayer.Migrations name: "UserMembers", columns: table => new { - MemberId = table.Column(nullable: false), - UserId = table.Column(nullable: false) + MemberId = table.Column(nullable: false), + AttachedMemberId = table.Column(nullable: false) }, constraints: table => { - table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.UserId }); + table.PrimaryKey("PK_UserMembers", x => new { x.MemberId, x.AttachedMemberId }); table.ForeignKey( - name: "FK_UserMembers_Node_MemberId", - column: x => x.MemberId, + name: "FK_UserMembers_Node_AttachedMemberId", + column: x => x.AttachedMemberId, principalTable: "Node", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_UserMembers_Node_UserId", - column: x => x.UserId, + name: "FK_UserMembers_Node_MemberId", + column: x => x.MemberId, principalTable: "Node", principalColumn: "Id", onDelete: ReferentialAction.Cascade); @@ -66,47 +66,47 @@ namespace UserService.DatabaseLayer.Migrations migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -2, "Users", null, "OrganizationUnit", null, null }); + values: new object[] { new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), "Users", null, "OrganizationUnit", null, null }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -1, "Groups", null, "OrganizationUnit", null, null }); + values: new object[] { new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"), "Groups", null, "OrganizationUnit", null, null }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -6, "Germany", null, "OrganizationUnit", -2, null }); + values: new object[] { new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"), "Germany", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -5, "USA", null, "OrganizationUnit", -2, null }); + values: new object[] { new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), "USA", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -3, "France", null, "OrganizationUnit", -2, null }); + values: new object[] { new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"), "France", null, "OrganizationUnit", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail", "FirstName", "IsActive", "LastName" }, - values: new object[] { -7, "holger", null, "User", -2, null, null, true, null }); + values: new object[] { new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"), "holger", null, "User", new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), null, null, true, null }); migrationBuilder.InsertData( table: "Node", - columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "EMail" }, - values: new object[] { -8, "Global Admin", null, "SecurityGroup", -1, null }); + columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId" }, + values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), "Global Admin", null, "SecurityGroup", new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913") }); migrationBuilder.InsertData( table: "Node", columns: new[] { "Id", "CommonName", "Description", "Discriminator", "ParentId", "ManagerId" }, - values: new object[] { -4, "Arizona", null, "OrganizationUnit", -5, null }); + values: new object[] { new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"), "Arizona", null, "OrganizationUnit", new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), null }); migrationBuilder.InsertData( table: "UserMembers", - columns: new[] { "MemberId", "UserId" }, - values: new object[] { -8, -7 }); + columns: new[] { "MemberId", "AttachedMemberId" }, + values: new object[] { new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269") }); migrationBuilder.CreateIndex( name: "IX_Node_ParentId", @@ -119,9 +119,9 @@ namespace UserService.DatabaseLayer.Migrations column: "ManagerId"); migrationBuilder.CreateIndex( - name: "IX_UserMembers_UserId", + name: "IX_UserMembers_AttachedMemberId", table: "UserMembers", - column: "UserId"); + column: "AttachedMemberId"); } protected override void Down(MigrationBuilder migrationBuilder) diff --git a/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs b/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs index 6bd5c44..6819060 100644 --- a/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs +++ b/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs @@ -16,11 +16,33 @@ namespace UserService.DatabaseLayer.Migrations modelBuilder .HasAnnotation("ProductVersion", "3.1.7"); + modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b => + { + b.Property("MemberId") + .HasColumnType("TEXT"); + + b.Property("AttachedMemberId") + .HasColumnType("TEXT"); + + b.HasKey("MemberId", "AttachedMemberId"); + + b.HasIndex("AttachedMemberId"); + + b.ToTable("UserMembers"); + + b.HasData( + new + { + MemberId = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), + AttachedMemberId = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269") + }); + }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => { - b.Property("Id") + b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); + .HasColumnType("TEXT"); b.Property("CommonName") .IsRequired() @@ -33,8 +55,8 @@ namespace UserService.DatabaseLayer.Migrations .IsRequired() .HasColumnType("TEXT"); - b.Property("ParentId") - .HasColumnType("INTEGER"); + b.Property("ParentId") + .HasColumnType("TEXT"); b.HasKey("Id"); @@ -45,35 +67,10 @@ namespace UserService.DatabaseLayer.Migrations b.HasDiscriminator("Discriminator").HasValue("Node"); }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b => - { - b.Property("MemberId") - .HasColumnType("INTEGER"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("MemberId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("UserMembers"); - - b.HasData( - new - { - MemberId = -8, - UserId = -7 - }); - }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.Member", b => { b.HasBaseType("UserService.Infrastructure.DataModels.Node"); - b.Property("EMail") - .HasColumnType("TEXT"); - b.HasDiscriminator().HasValue("Member"); }); @@ -81,8 +78,8 @@ namespace UserService.DatabaseLayer.Migrations { b.HasBaseType("UserService.Infrastructure.DataModels.Node"); - b.Property("ManagerId") - .HasColumnType("INTEGER"); + b.Property("ManagerId") + .HasColumnType("TEXT"); b.HasIndex("ManagerId"); @@ -91,37 +88,37 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -2, + Id = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), CommonName = "Users" }, new { - Id = -1, + Id = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913"), CommonName = "Groups" }, new { - Id = -6, + Id = new Guid("c743fff4-9bdf-45a4-b4c9-391f6fc46433"), CommonName = "Germany", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }, new { - Id = -5, + Id = new Guid("cecbf557-59cc-475c-b136-02da39aa4911"), CommonName = "USA", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }, new { - Id = -4, + Id = new Guid("89e1d70e-da3d-4cc9-81f1-a2fa76a6d33b"), CommonName = "Arizona", - ParentId = -5 + ParentId = new Guid("cecbf557-59cc-475c-b136-02da39aa4911") }, new { - Id = -3, + Id = new Guid("97ad8c82-c5ea-4de1-a474-bf25418a9533"), CommonName = "France", - ParentId = -2 + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551") }); }); @@ -134,9 +131,9 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -8, + Id = new Guid("a830a548-8b92-4a95-aa8e-c71ae814c6a3"), CommonName = "Global Admin", - ParentId = -1 + ParentId = new Guid("c94f4749-b7c7-418d-8c10-bc4253c4b913") }); }); @@ -144,6 +141,9 @@ namespace UserService.DatabaseLayer.Migrations { b.HasBaseType("UserService.Infrastructure.DataModels.Member"); + b.Property("EMail") + .HasColumnType("TEXT"); + b.Property("FirstName") .HasColumnType("TEXT"); @@ -158,13 +158,28 @@ namespace UserService.DatabaseLayer.Migrations b.HasData( new { - Id = -7, + Id = new Guid("fd9f5d95-0898-47d4-8d25-6956077ba269"), CommonName = "holger", - ParentId = -2, + ParentId = new Guid("c2366c9c-e79a-45c8-933c-40d0301b2551"), IsActive = true }); }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.MembersMember", b => + { + b.HasOne("UserService.Infrastructure.DataModels.Member", "AttachedMember") + .WithMany("MemberOf") + .HasForeignKey("AttachedMemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("UserService.Infrastructure.DataModels.Member", "Member") + .WithMany("Members") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("UserService.Infrastructure.DataModels.Node", b => { b.HasOne("UserService.Infrastructure.DataModels.Node", "Parent") @@ -172,21 +187,6 @@ namespace UserService.DatabaseLayer.Migrations .HasForeignKey("ParentId"); }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.UserMember", b => - { - b.HasOne("UserService.Infrastructure.DataModels.Member", "Member") - .WithMany("Members") - .HasForeignKey("MemberId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("UserService.Infrastructure.DataModels.User", "User") - .WithMany("MemberOf") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("UserService.Infrastructure.DataModels.OrganizationUnit", b => { b.HasOne("UserService.Infrastructure.DataModels.Member", "Manager") diff --git a/UserService.Infrastructure/DataModels/Member.cs b/UserService.Infrastructure/DataModels/Member.cs index 836ff5e..b77cfef 100644 --- a/UserService.Infrastructure/DataModels/Member.cs +++ b/UserService.Infrastructure/DataModels/Member.cs @@ -4,6 +4,8 @@ namespace UserService.Infrastructure.DataModels { public abstract class Member : Node { - public ICollection Members { get; set; } = new List(); + public ICollection Members { get; set; } = new List(); + + public ICollection MemberOf { get; set; } = null!; } } \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/MembersMember.cs b/UserService.Infrastructure/DataModels/MembersMember.cs new file mode 100644 index 0000000..3770113 --- /dev/null +++ b/UserService.Infrastructure/DataModels/MembersMember.cs @@ -0,0 +1,13 @@ +using System; +namespace UserService.Infrastructure.DataModels +{ + public class MembersMember + { + public Guid MemberId { get; set; } + public Member? Member { get; set; } + + public Guid AttachedMemberId { get; set; } + + public Member? AttachedMember { get; set; } + } +} \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/Node.cs b/UserService.Infrastructure/DataModels/Node.cs index 6bbb3c0..a671290 100644 --- a/UserService.Infrastructure/DataModels/Node.cs +++ b/UserService.Infrastructure/DataModels/Node.cs @@ -7,12 +7,12 @@ namespace UserService.Infrastructure.DataModels { public abstract class Node : ICloneable { - public int Id { get; set; } + public Guid Id { get; set; } [Required] public string CommonName { get; set; } = null!; public string? Description { get; set; } public ICollection Children { get; set; } = new List(); public Node? Parent { get; set; } //Parent - public int? ParentId { get; set; } + public Guid? ParentId { get; set; } public override string ToString() => CommonName; diff --git a/UserService.Infrastructure/DataModels/User.cs b/UserService.Infrastructure/DataModels/User.cs index 29307e0..dbc2eb9 100644 --- a/UserService.Infrastructure/DataModels/User.cs +++ b/UserService.Infrastructure/DataModels/User.cs @@ -14,7 +14,5 @@ namespace UserService.Infrastructure.DataModels public string? EMail { get; set; } public string FullName => $"{FirstName} {LastName}"; - - public IEnumerable MemberOf { get; set; } = new List(); } } \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/UserMember.cs b/UserService.Infrastructure/DataModels/UserMember.cs deleted file mode 100644 index 91d4f69..0000000 --- a/UserService.Infrastructure/DataModels/UserMember.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace UserService.Infrastructure.DataModels -{ - public class UserMember - { - public int MemberId { get; set; } - public Member? Member { get; set; } - - public int UserId { get; set; } - - public User? User { get; set; } - } -} \ No newline at end of file diff --git a/UserService.Test/UnitTest1.cs b/UserService.Test/UnitTest1.cs index 8fc8774..a1e0c96 100644 --- a/UserService.Test/UnitTest1.cs +++ b/UserService.Test/UnitTest1.cs @@ -26,7 +26,7 @@ namespace UserService.Test var mo = await db.UserMembers.ToListAsync().ConfigureAwait(false); var securityGroupsOfUser = user.GetSecurityGroups(); - var usersOfSecurityGroup = secGroup.GetUsers(); + var usersOfSecurityGroup = secGroup.GetAttachedMembers(); //var testGroup = new SecurityGroup {CommonName = "Test", Parent = ous.Last()}; //await db.SecurityGroups.AddAsync(testGroup); //var testgroup = await db.SecurityGroups.FindAsync(1); diff --git a/UserService.db b/UserService.db index c3831e1..f147691 100644 Binary files a/UserService.db and b/UserService.db differ diff --git a/UserService/Pages/SecurityGroups.razor b/UserService/Pages/SecurityGroups.razor index 38f59e7..617bded 100644 --- a/UserService/Pages/SecurityGroups.razor +++ b/UserService/Pages/SecurityGroups.razor @@ -74,10 +74,10 @@ else } - @foreach (var item in OrganizationUnits ?? Enumerable.Empty()) { - @item.CommonName + @item.CommonName } @@ -128,25 +128,29 @@ else - - - 1 - Mark - - - - - - 2 - Jacob - - - - 3 - Larry - - - + + @foreach (var member in SelectedSecurityGroup?.Members ?? Enumerable.Empty()) + { + + @member.MemberId + Mark + + + + + } + + + 2 + Jacob + + + + 3 + Larry + + + diff --git a/UserService/Pages/SecurityGroups.razor.cs b/UserService/Pages/SecurityGroups.razor.cs index 4ec761c..282915c 100644 --- a/UserService/Pages/SecurityGroups.razor.cs +++ b/UserService/Pages/SecurityGroups.razor.cs @@ -15,7 +15,7 @@ namespace UserService.Pages [Inject] private ISecurityGroupsRepository SecurityGroupsRepository { get; set; } = null!; [Inject] private IUsersRepository UsersRepository { get; set; } = null!; - + [Inject] private IOrganizationUnitsRepository OrganizationUnitsRepository { get; set; } = null!; // reference to the modal component @@ -57,7 +57,7 @@ namespace UserService.Pages var securityGroup = arg.Item; securityGroup.MapFields(arg.Values); securityGroup.Parent = - OrganizationUnits?.FirstOrDefault(x => x.Id == (int?) arg.Values[nameof(Node.ParentId)]); + OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.ParentId)]); var result = await SecurityGroupsRepository.UpdateAsync(securityGroup).ConfigureAwait(false); arg.Cancel = !result; } @@ -89,14 +89,14 @@ namespace UserService.Pages } - protected async Task AddToListAsync() - { - //SelectedSecurityGroup.Members.Add(new UserMember()); - } + protected async Task AddToListAsync() + { + //SelectedSecurityGroup.Members.Add(new UserMember()); + } - protected void OnButtonClicked(SecurityGroup securityGroup) + protected void OnButtonClicked(SecurityGroup securityGroup) { SelectedSecurityGroup = securityGroup; ModalRef.Show(); diff --git a/UserService/Pages/Users.razor b/UserService/Pages/Users.razor index 750e751..219f163 100644 --- a/UserService/Pages/Users.razor +++ b/UserService/Pages/Users.razor @@ -90,10 +90,10 @@ else } - @foreach (var item in OrganizationUnits ?? Enumerable.Empty()) { - @item.CommonName + @item.CommonName } diff --git a/UserService/Pages/Users.razor.cs b/UserService/Pages/Users.razor.cs index 8b42244..fd6cd46 100644 --- a/UserService/Pages/Users.razor.cs +++ b/UserService/Pages/Users.razor.cs @@ -71,7 +71,7 @@ namespace UserService.Pages if (arg == null) throw new ArgumentNullException(nameof(arg)); var user = arg.Item; user.MapFields(arg.Values); - user.Parent = OrganizationUnits?.FirstOrDefault(x => x.Id == (int?)arg.Values[nameof(Node.ParentId)]); + user.Parent = OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.ParentId)]); var result = await UsersRepository.UpdateAsync(user).ConfigureAwait(false); arg.Cancel = !result; }