From 5c86727baa73fc505ec04210c966c4138ff74908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20B=C3=B6rchers?= Date: Sun, 27 Sep 2020 22:16:57 +0200 Subject: [PATCH] Cleanup --- .../Repositories/BaseRepository.cs | 11 +++++++++-- .../Repositories/IRepository.cs | 4 +++- .../OrganizationUnitsRepository.cs | 2 +- .../Repositories/SecurityGroupsRepository.cs | 7 ++++++- .../DataModels/Member.cs | 4 ++-- .../DataModels/MembersMember.cs | 17 +++++++++++++++++ UserService.Infrastructure/DataModels/Node.cs | 13 +++++++++++-- UserService.db | Bin 40960 -> 40960 bytes UserService/Pages/SecurityGroups.razor.cs | 8 ++++++-- 9 files changed, 55 insertions(+), 11 deletions(-) diff --git a/UserService.DatabaseLayer/Repositories/BaseRepository.cs b/UserService.DatabaseLayer/Repositories/BaseRepository.cs index 25970e3..14a3f36 100644 --- a/UserService.DatabaseLayer/Repositories/BaseRepository.cs +++ b/UserService.DatabaseLayer/Repositories/BaseRepository.cs @@ -37,13 +37,20 @@ namespace UserService.DatabaseLayer.Repositories public virtual async Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) { await using var db = new UserServiceDbContext(); - return await Context(db).Include(x => x.Parent).WhereOrDefault(predicate).ToListAsync(token).ConfigureAwait(false); + return await Context(db) + .Include(x => x.Parent) + .WhereOrDefault(predicate) + .ToListAsync(token) + .ConfigureAwait(false); } public virtual async Task GetAsync(Expression> predicate, CancellationToken token = default) { await using var db = new UserServiceDbContext(); - return await Context(db).Include(x => x.Parent).FirstOrDefaultAsync(predicate, token).ConfigureAwait(false); + return await Context(db) + .Include(x => x.Parent) + .FirstOrDefaultAsync(predicate, token) + .ConfigureAwait(false); } public virtual async Task UpdateAsync(T entity, CancellationToken token = default) { diff --git a/UserService.DatabaseLayer/Repositories/IRepository.cs b/UserService.DatabaseLayer/Repositories/IRepository.cs index 5874bf0..5baa696 100644 --- a/UserService.DatabaseLayer/Repositories/IRepository.cs +++ b/UserService.DatabaseLayer/Repositories/IRepository.cs @@ -32,8 +32,10 @@ namespace UserService.DatabaseLayer.Repositories } - public interface IMembersRepository : IRepository + public interface IMembersRepository { } + + } \ No newline at end of file diff --git a/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs b/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs index 8c6b43a..c131691 100644 --- a/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs +++ b/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs @@ -24,7 +24,7 @@ namespace UserService.DatabaseLayer.Repositories var rootOus = await Context(db) .Include(x => x.Parent) .WhereOrDefault(predicate) - .ToListAsync(cancellationToken: token).ConfigureAwait(false); + .ToListAsync(token).ConfigureAwait(false); IEnumerable Rec(Node node) { diff --git a/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs b/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs index a7aefed..7ce56c2 100644 --- a/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs +++ b/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs @@ -1,4 +1,6 @@ -using Microsoft.EntityFrameworkCore; +#nullable enable + +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; @@ -39,8 +41,11 @@ namespace UserService.DatabaseLayer.Repositories public override async Task UpdateAsync(SecurityGroup entity, CancellationToken token = default) { + if (entity == null) throw new ArgumentNullException(nameof(entity)); + await using var db = new UserServiceDbContext(); Context(db).Update(entity); + db.UserMembers.UpdateRange(entity.Members); var items = await db.SaveChangesAsync(token).ConfigureAwait(false); return items > 0; } diff --git a/UserService.Infrastructure/DataModels/Member.cs b/UserService.Infrastructure/DataModels/Member.cs index b77cfef..56e8ed4 100644 --- a/UserService.Infrastructure/DataModels/Member.cs +++ b/UserService.Infrastructure/DataModels/Member.cs @@ -4,8 +4,8 @@ namespace UserService.Infrastructure.DataModels { public abstract class Member : Node { - public ICollection Members { get; set; } = new List(); + public ISet Members { get; set; } = new HashSet(); - public ICollection MemberOf { get; set; } = null!; + public ISet MemberOf { get; set; } = null!; } } \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/MembersMember.cs b/UserService.Infrastructure/DataModels/MembersMember.cs index 3770113..a72b3e3 100644 --- a/UserService.Infrastructure/DataModels/MembersMember.cs +++ b/UserService.Infrastructure/DataModels/MembersMember.cs @@ -9,5 +9,22 @@ namespace UserService.Infrastructure.DataModels public Guid AttachedMemberId { get; set; } public Member? AttachedMember { get; set; } + + public override bool Equals(object obj) => Equals((MembersMember)obj); + + public bool Equals(MembersMember other) + { + return MemberId.Equals(other.MemberId) && AttachedMemberId.Equals(other.AttachedMemberId); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = MemberId.GetHashCode(); + hashCode = (hashCode * 397) ^ AttachedMemberId.GetHashCode(); + return hashCode; + } + } } } \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/Node.cs b/UserService.Infrastructure/DataModels/Node.cs index a671290..440fd9a 100644 --- a/UserService.Infrastructure/DataModels/Node.cs +++ b/UserService.Infrastructure/DataModels/Node.cs @@ -5,12 +5,12 @@ using System.ComponentModel.DataAnnotations; namespace UserService.Infrastructure.DataModels { - public abstract class Node : ICloneable + public abstract class Node : ICloneable, IComparable { 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 ISet Children { get; set; } = new SortedSet(); public Node? Parent { get; set; } //Parent public Guid? ParentId { get; set; } @@ -20,5 +20,14 @@ namespace UserService.Infrastructure.DataModels /// public virtual object Clone() => MemberwiseClone(); + + public int CompareTo(Node? other) + { + if (ReferenceEquals(this, other)) return 0; + if (ReferenceEquals(null, other)) return 1; + var commonNameComparison = string.Compare(CommonName, other.CommonName, StringComparison.Ordinal); + if (commonNameComparison != 0) return commonNameComparison; + return Id.CompareTo(other.Id); + } } } \ No newline at end of file diff --git a/UserService.db b/UserService.db index e80347f216afd4993e993d365936c2510f5552a5..0c2c2e14c0d8106b4759bca7b5e2f9ffce5a31b5 100644 GIT binary patch delta 144 zcmZoTz|?SnX#=ByByTzcC-*M~{$0Fp`PupA^OA8uSIeN+Yxs$7H-bnBlGf1d1 qgsL-ufTM-6fupI3g|3Cup4|1SPwes;e3d?vhCdDD4*^HgsZ6iDQmTy67aa=mRH oZ!8;ks3b$EC{Q&6!(@JcmC4#RdYet`>=`G&wRPXT%ib*k0LY^k%K!iX diff --git a/UserService/Pages/SecurityGroups.razor.cs b/UserService/Pages/SecurityGroups.razor.cs index 99c0c2c..e8643ac 100644 --- a/UserService/Pages/SecurityGroups.razor.cs +++ b/UserService/Pages/SecurityGroups.razor.cs @@ -96,13 +96,17 @@ namespace UserService.Pages { if (SelectedMember is null) return; if (SelectedSecurityGroup is null) return; - SelectedSecurityGroup.Members.Add(new MembersMember + if (!SelectedSecurityGroup.Members.Add(new MembersMember { MemberId = SelectedSecurityGroup.Id, Member = SelectedSecurityGroup, AttachedMemberId = SelectedMember.Id, AttachedMember = SelectedMember - }); + })) + { + await JsRuntime.AlertAsync("User already part of the list.").ConfigureAwait(false); + } + SelectedMember = default; }