diff --git a/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs b/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs index 68710ae..e2be228 100644 --- a/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs +++ b/UserService.DatabaseLayer/DataModels/ModelBuilderExtensions.cs @@ -1,6 +1,7 @@ using System; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.DataModels { diff --git a/UserService.DatabaseLayer/DataModels/Node.cs b/UserService.DatabaseLayer/DataModels/Node.cs deleted file mode 100644 index ed5c873..0000000 --- a/UserService.DatabaseLayer/DataModels/Node.cs +++ /dev/null @@ -1,62 +0,0 @@ -#nullable enable -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; - -namespace UserService.DatabaseLayer.DataModels -{ - public class OrganizationUnit : Node - { - public Member? Manager { get; set; } - } - - public class SecurityGroup : Member - { - } - - public class User : Member - { - public string? FirstName { get; set; } - public string? LastName { get; set; } - public bool IsActive { get; set; } - - public string FullName => $"{FirstName} {LastName}"; - - public IEnumerable MemberOf { get; set; } = new List(); - } - - public class UserMember - { - public int MemberId { get; set; } - public Member? Member { get; set; } - - public int UserId { get; set; } - - public User? User { get; set; } - } - - public abstract class Member : Node - { - [EmailAddress] - public string? EMail { get; set; } - - public ICollection Members { get; set; } = new List(); - } - - public abstract class Node : ICloneable - { - public int 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 override string ToString() => CommonName; - - public int Level => Parent?.Level + 1 ?? 0; - - /// - public virtual object Clone() => MemberwiseClone(); - } -} \ No newline at end of file diff --git a/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs b/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs index 68c5567..cd9e5d8 100644 --- a/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs +++ b/UserService.DatabaseLayer/DataModels/UserServiceDbContext.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.DataModels { diff --git a/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs b/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs index 4d03a6e..c9aa074 100644 --- a/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs +++ b/UserService.DatabaseLayer/Migrations/UserServiceDbContextModelSnapshot.cs @@ -1,8 +1,7 @@ // -using System; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using UserService.DatabaseLayer.DataModels; namespace UserService.DatabaseLayer.Migrations diff --git a/UserService.DatabaseLayer/Repository/BaseRepository.cs b/UserService.DatabaseLayer/Repository/BaseRepository.cs index b50f2ee..61db729 100644 --- a/UserService.DatabaseLayer/Repository/BaseRepository.cs +++ b/UserService.DatabaseLayer/Repository/BaseRepository.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repository { diff --git a/UserService.DatabaseLayer/Repository/IRepository.cs b/UserService.DatabaseLayer/Repository/IRepository.cs index 5a95ac4..74058e5 100644 --- a/UserService.DatabaseLayer/Repository/IRepository.cs +++ b/UserService.DatabaseLayer/Repository/IRepository.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repository { diff --git a/UserService.DatabaseLayer/Repository/OrganizationUnitsRepository.cs b/UserService.DatabaseLayer/Repository/OrganizationUnitsRepository.cs index 7a1fa41..fa44e7c 100644 --- a/UserService.DatabaseLayer/Repository/OrganizationUnitsRepository.cs +++ b/UserService.DatabaseLayer/Repository/OrganizationUnitsRepository.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repository { diff --git a/UserService.DatabaseLayer/Repository/SecurityGroupsRepository.cs b/UserService.DatabaseLayer/Repository/SecurityGroupsRepository.cs index 0f4ce54..6948ce7 100644 --- a/UserService.DatabaseLayer/Repository/SecurityGroupsRepository.cs +++ b/UserService.DatabaseLayer/Repository/SecurityGroupsRepository.cs @@ -1,4 +1,4 @@ -using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repository { diff --git a/UserService.DatabaseLayer/Repository/UsersRepository.cs b/UserService.DatabaseLayer/Repository/UsersRepository.cs index 95421ca..cb60251 100644 --- a/UserService.DatabaseLayer/Repository/UsersRepository.cs +++ b/UserService.DatabaseLayer/Repository/UsersRepository.cs @@ -1,4 +1,4 @@ -using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repository { diff --git a/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj b/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj index fc60665..6bd1a27 100644 --- a/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj +++ b/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 - 8 + latest enable @@ -18,4 +18,8 @@ + + + + diff --git a/UserService.Infrastructure/DataModels/Member.cs b/UserService.Infrastructure/DataModels/Member.cs new file mode 100644 index 0000000..ee4a4cc --- /dev/null +++ b/UserService.Infrastructure/DataModels/Member.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace UserService.Infrastructure.DataModels +{ + public abstract class Member : Node + { + [EmailAddress] + public string? EMail { get; set; } + + public ICollection Members { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/Node.cs b/UserService.Infrastructure/DataModels/Node.cs new file mode 100644 index 0000000..6bbb3c0 --- /dev/null +++ b/UserService.Infrastructure/DataModels/Node.cs @@ -0,0 +1,24 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace UserService.Infrastructure.DataModels +{ + public abstract class Node : ICloneable + { + public int 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 override string ToString() => CommonName; + + public int Level => Parent?.Level + 1 ?? 0; + + /// + public virtual object Clone() => MemberwiseClone(); + } +} \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/OrganizationUnit.cs b/UserService.Infrastructure/DataModels/OrganizationUnit.cs new file mode 100644 index 0000000..405278a --- /dev/null +++ b/UserService.Infrastructure/DataModels/OrganizationUnit.cs @@ -0,0 +1,7 @@ +namespace UserService.Infrastructure.DataModels +{ + public class OrganizationUnit : Node + { + public Member? Manager { get; set; } + } +} \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/SecurityGroup.cs b/UserService.Infrastructure/DataModels/SecurityGroup.cs new file mode 100644 index 0000000..78d3a91 --- /dev/null +++ b/UserService.Infrastructure/DataModels/SecurityGroup.cs @@ -0,0 +1,6 @@ +namespace UserService.Infrastructure.DataModels +{ + public class SecurityGroup : Member + { + } +} \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/User.cs b/UserService.Infrastructure/DataModels/User.cs new file mode 100644 index 0000000..a7f458e --- /dev/null +++ b/UserService.Infrastructure/DataModels/User.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace UserService.Infrastructure.DataModels +{ + public class User : Member + { + public string? FirstName { get; set; } + public string? LastName { get; set; } + public bool IsActive { 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 new file mode 100644 index 0000000..91d4f69 --- /dev/null +++ b/UserService.Infrastructure/DataModels/UserMember.cs @@ -0,0 +1,12 @@ +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.Infrastructure/UserService.Infrastructure.csproj b/UserService.Infrastructure/UserService.Infrastructure.csproj new file mode 100644 index 0000000..551862b --- /dev/null +++ b/UserService.Infrastructure/UserService.Infrastructure.csproj @@ -0,0 +1,12 @@ + + + + netstandard2.0 + latest + + + + + + + diff --git a/UserService.Infrastructure/Validators.cs b/UserService.Infrastructure/Validators.cs new file mode 100644 index 0000000..5eabcf6 --- /dev/null +++ b/UserService.Infrastructure/Validators.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using UserService.Infrastructure.DataModels; + +namespace UserService.Infrastructure +{ + public static class Validators + { + public static bool? ValidateEmail(string mailAddress) + { + if (string.IsNullOrEmpty(mailAddress)) return null; + return new EmailAddressAttribute().IsValid(mailAddress); + } + + public static bool? ValidateCommonName(string commonName, IReadOnlyList users) + { + if (string.IsNullOrEmpty(commonName)) return false; + return users.All(x => x.CommonName != commonName); + } + } +} diff --git a/UserService.Test/UnitTest1.cs b/UserService.Test/UnitTest1.cs index 0b70fc3..8fc8774 100644 --- a/UserService.Test/UnitTest1.cs +++ b/UserService.Test/UnitTest1.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.Test { diff --git a/UserService.Test/UserService.Test.csproj b/UserService.Test/UserService.Test.csproj index 48b2f52..c20cbd9 100644 --- a/UserService.Test/UserService.Test.csproj +++ b/UserService.Test/UserService.Test.csproj @@ -4,6 +4,8 @@ netcoreapp3.1 false + + latest diff --git a/UserService.db b/UserService.db index 11403be..adc6bf4 100644 Binary files a/UserService.db and b/UserService.db differ diff --git a/UserService.sln b/UserService.sln index 3136372..6153a9d 100644 --- a/UserService.sln +++ b/UserService.sln @@ -14,6 +14,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserService.Infrastructure", "UserService.Infrastructure\UserService.Infrastructure.csproj", "{586BD023-5C7B-4D9C-A17E-A0D5CEDADD20}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -32,6 +34,10 @@ Global {4505C991-7E39-416F-94E5-D906DD0D90F9}.Debug|Any CPU.Build.0 = Debug|Any CPU {4505C991-7E39-416F-94E5-D906DD0D90F9}.Release|Any CPU.ActiveCfg = Release|Any CPU {4505C991-7E39-416F-94E5-D906DD0D90F9}.Release|Any CPU.Build.0 = Release|Any CPU + {586BD023-5C7B-4D9C-A17E-A0D5CEDADD20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {586BD023-5C7B-4D9C-A17E-A0D5CEDADD20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {586BD023-5C7B-4D9C-A17E-A0D5CEDADD20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {586BD023-5C7B-4D9C-A17E-A0D5CEDADD20}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/UserService/Pages/Directory.razor.cs b/UserService/Pages/Directory.razor.cs index 2e238b7..d7e6419 100644 --- a/UserService/Pages/Directory.razor.cs +++ b/UserService/Pages/Directory.razor.cs @@ -2,8 +2,8 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; -using UserService.DatabaseLayer.DataModels; using UserService.DatabaseLayer.Repository; +using UserService.Infrastructure.DataModels; namespace UserService.Pages { diff --git a/UserService/Pages/SecurityGroups.razor b/UserService/Pages/SecurityGroups.razor index 21b50da..aef421f 100644 --- a/UserService/Pages/SecurityGroups.razor +++ b/UserService/Pages/SecurityGroups.razor @@ -1,5 +1,5 @@ @page "/securitygroups" -@using UserService.DatabaseLayer.DataModels +@using UserService.Infrastructure.DataModels @inherits SecurityGroupsBase

Table of all security groups

diff --git a/UserService/Pages/SecurityGroups.razor.cs b/UserService/Pages/SecurityGroups.razor.cs index 1c65bfd..c1fcb06 100644 --- a/UserService/Pages/SecurityGroups.razor.cs +++ b/UserService/Pages/SecurityGroups.razor.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; -using UserService.DatabaseLayer.DataModels; using UserService.DatabaseLayer.Repository; +using UserService.Infrastructure.DataModels; namespace UserService.Pages { diff --git a/UserService/Pages/Users.razor b/UserService/Pages/Users.razor index 82bbe63..33c4612 100644 --- a/UserService/Pages/Users.razor +++ b/UserService/Pages/Users.razor @@ -1,5 +1,5 @@ @page "/users" -@using UserService.DatabaseLayer.DataModels +@using UserService.Infrastructure.DataModels @inherits UsersBase

List of all users

@@ -12,7 +12,9 @@ } else { - + + +