diff --git a/UserService.DatabaseLayer/DataModels/Class1.cs b/UserService.DatabaseLayer/DataModels/Class1.cs deleted file mode 100644 index 57e9da2..0000000 --- a/UserService.DatabaseLayer/DataModels/Class1.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using LinqToDB.Configuration; - -namespace DataModels -{ - public class ConnectionStringSettings : IConnectionStringSettings - { - public string ConnectionString { get; set; } - public string Name { get; set; } - public string ProviderName { get; set; } - public bool IsGlobal => false; - } - - public class MySettings : ILinqToDBSettings - { - public IEnumerable DataProviders => Enumerable.Empty(); - - public string DefaultConfiguration => "MySqlServer"; - public string DefaultDataProvider => "MySqlServer"; - - public IEnumerable ConnectionStrings - { - get - { - yield return - new ConnectionStringSettings - { - Name = "Northwind", - ProviderName = "MySqlServer", - ConnectionString = @"Server=srvbo;Database=UserService;Uid=UserDbAdmin;Pwd=12345678;" - }; - } - } - } -} \ No newline at end of file diff --git a/UserService.DatabaseLayer/DataModels/ConnectionStringSettings.cs b/UserService.DatabaseLayer/DataModels/ConnectionStringSettings.cs new file mode 100644 index 0000000..369e329 --- /dev/null +++ b/UserService.DatabaseLayer/DataModels/ConnectionStringSettings.cs @@ -0,0 +1,12 @@ +using LinqToDB.Configuration; + +namespace UserService.DatabaseLayer.DataModels +{ + public class ConnectionStringSettings : IConnectionStringSettings + { + public string ConnectionString { get; } = @"Server=srvbo;Database=UserService2;Uid=UserDbAdmin;Pwd=12345678;"; + public string Name { get; } = "UserServiceDb"; + public string ProviderName { get; } = "MySqlServer"; + public bool IsGlobal { get; } + } +} \ No newline at end of file diff --git a/UserService.DatabaseLayer/DataModels/UserDatabase.generated.cs b/UserService.DatabaseLayer/DataModels/UserDatabase.generated.cs index d7dc688..1385fe8 100644 --- a/UserService.DatabaseLayer/DataModels/UserDatabase.generated.cs +++ b/UserService.DatabaseLayer/DataModels/UserDatabase.generated.cs @@ -15,29 +15,25 @@ using System.Linq; using LinqToDB; using LinqToDB.Mapping; -namespace DataModels +namespace UserService.DatabaseLayer.DataModels { /// - /// Database : UserService + /// Database : UserService2 /// Data Source : srvbo /// Server Version : 5.5.5-10.3.22-MariaDB-1ubuntu1 /// - public partial class UserServiceDB : LinqToDB.Data.DataConnection + public partial class UserService2DB : LinqToDB.Data.DataConnection { - public ITable Members { get { return this.GetTable(); } } - public ITable MembersMembers { get { return this.GetTable(); } } - public ITable Nodes { get { return this.GetTable(); } } - public ITable OrganizationUnits { get { return this.GetTable(); } } - public ITable SecurityGroups { get { return this.GetTable(); } } - public ITable Users { get { return this.GetTable(); } } + public ITable IsMemberOfs { get { return this.GetTable(); } } + public ITable NodeModels { get { return this.GetTable(); } } - public UserServiceDB() + public UserService2DB() { InitDataContext(); InitMappingSchema(); } - public UserServiceDB(string configuration) + public UserService2DB(string configuration) : base(configuration) { InitDataContext(); @@ -48,167 +44,94 @@ namespace DataModels partial void InitMappingSchema(); } - [Table("Members")] - public partial class Member + [Table("IsMemberOf")] + public partial class IsMemberOf { - [Column, NotNull] public int Id { get; set; } // int(11) + [PrimaryKey(1), NotNull] public int NodeId { get; set; } // int(11) + [PrimaryKey(2), NotNull] public int NodeMemberId { get; set; } // int(11) #region Associations /// - /// MembersMember_ibfk_2_BackReference + /// IsMemberOf_ibfk_1 /// - [Association(ThisKey="Id", OtherKey="AttachedMemberId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable MembersMemberibfks { get; set; } = null!; + [Association(ThisKey="NodeId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="IsMemberOf_ibfk_1", BackReferenceName="IsMemberOfibfks")] + public NodeModel Node { get; set; } = null!; /// - /// Members_ibfk_2 + /// IsMemberOf_ibfk_2 /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Members_ibfk_2", BackReferenceName="Membersibfks")] - public Node Node { get; set; } = null!; - - /// - /// SecurityGroups_ibfk_2_BackReference - /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable SecurityGroupsibfks { get; set; } = null!; - - /// - /// Users_ibfk_2_BackReference - /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable Usersibfks { get; set; } = null!; + [Association(ThisKey="NodeMemberId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="IsMemberOf_ibfk_2", BackReferenceName="IsMemberOfIbfk2BackReferences")] + public NodeModel NodeMember { get; set; } = null!; #endregion } - [Table("MembersMember")] - public partial class MembersMember + [Table("NodeModels")] + public partial class NodeModel { - [PrimaryKey(1), NotNull] public int MemberId { get; set; } // int(11) - [PrimaryKey(2), NotNull] public int AttachedMemberId { get; set; } // int(11) + [PrimaryKey, Identity ] public int Id { get; set; } // int(11) + [Column, NotNull ] public string CommonName { get; set; } = null!; // varchar(64) + [Column, Nullable] public string? FirstName { get; set; } // text + [Column, Nullable] public string? LastName { get; set; } // text + [Column, Nullable] public string? Description { get; set; } // text + [Column, Nullable] public int? ParentId { get; set; } // int(11) + [Column, Nullable] public int? ManagerId { get; set; } // int(11) + [Column, Nullable] public string? EMail { get; set; } // text + [Column, NotNull ] public bool IsActive { get; set; } // bit(1) + [Column, NotNull ] public string Discriminator { get; set; } = null!; // text #region Associations /// - /// MembersMember_ibfk_2 + /// NodeModels_ibfk_2_BackReference /// - [Association(ThisKey="AttachedMemberId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="MembersMember_ibfk_2", BackReferenceName="MembersMemberibfks")] - public Member AttachedMember { get; set; } = null!; + [Association(ThisKey="Id", OtherKey="ManagerId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] + public IEnumerable Ibfks { get; set; } = null!; /// - /// MembersMember_ibfk_3 + /// IsMemberOf_ibfk_2_BackReference /// - [Association(ThisKey="MemberId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="MembersMember_ibfk_3", BackReferenceName="MembersMemberibfks")] - public SecurityGroup Member { get; set; } = null!; - - #endregion - } - - [Table("Nodes")] - public partial class Node - { - [PrimaryKey, Identity] public int Id { get; set; } // int(11) - [Column, NotNull ] public string CommonName { get; set; } = null!; // text - - #region Associations + [Association(ThisKey="Id", OtherKey="NodeMemberId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] + public IEnumerable IsMemberOfIbfk2BackReferences { get; set; } = null!; /// - /// Members_ibfk_2_BackReference + /// IsMemberOf_ibfk_1_BackReference /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable Membersibfks { get; set; } = null!; + [Association(ThisKey="Id", OtherKey="NodeId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] + public IEnumerable IsMemberOfibfks { get; set; } = null!; /// - /// OrganizationUnits_ibfk_2_BackReference + /// NodeModels_ibfk_2 /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable OrganizationUnitsibfks { get; set; } = null!; - - #endregion - } - - [Table("OrganizationUnits")] - public partial class OrganizationUnit - { - [Column, NotNull ] public int Id { get; set; } // int(11) - [Column, Nullable] public int? ManagerId { get; set; } // int(11) - [Column, Nullable] public int? ParentId { get; set; } // int(11) - - #region Associations + [Association(ThisKey="ManagerId", OtherKey="Id", CanBeNull=true, Relationship=Relationship.ManyToOne, KeyName="NodeModels_ibfk_2", BackReferenceName="Ibfks")] + public NodeModel? Manager { get; set; } /// - /// OrganizationUnits_ibfk_3_BackReference + /// NodeModels_ibfk_3_BackReference /// [Association(ThisKey="Id", OtherKey="ParentId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable Ibfks { get; set; } = null!; + public IEnumerable NodeModelsIbfk3BackReferences { get; set; } = null!; /// - /// OrganizationUnits_ibfk_2 + /// NodeModels_ibfk_3 /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="OrganizationUnits_ibfk_2", BackReferenceName="OrganizationUnitsibfks")] - public Node Node { get; set; } = null!; - - /// - /// OrganizationUnits_ibfk_3 - /// - [Association(ThisKey="ParentId", OtherKey="Id", CanBeNull=true, Relationship=Relationship.ManyToOne, KeyName="OrganizationUnits_ibfk_3", BackReferenceName="Ibfks")] - public OrganizationUnit? Parent { get; set; } - - #endregion - } - - [Table("SecurityGroups")] - public partial class SecurityGroup - { - [Column, NotNull] public int Id { get; set; } // int(11) - - #region Associations - - /// - /// SecurityGroups_ibfk_2 - /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="SecurityGroups_ibfk_2", BackReferenceName="SecurityGroupsibfks")] - public Member Member { get; set; } = null!; - - /// - /// MembersMember_ibfk_3_BackReference - /// - [Association(ThisKey="Id", OtherKey="MemberId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)] - public IEnumerable MembersMemberibfks { get; set; } = null!; - - #endregion - } - - [Table("Users")] - public partial class User - { - [Column, NotNull ] public int Id { get; set; } // int(11) - [Column, Nullable] public string? FirstName { get; set; } // text - [Column, Nullable] public string? LastName { get; set; } // text - [Column, NotNull ] public bool IsActive { get; set; } // bit(1) - - #region Associations - - /// - /// Users_ibfk_2 - /// - [Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Users_ibfk_2", BackReferenceName="Usersibfks")] - public Member Member { get; set; } = null!; + [Association(ThisKey="ParentId", OtherKey="Id", CanBeNull=true, Relationship=Relationship.ManyToOne, KeyName="NodeModels_ibfk_3", BackReferenceName="NodeModelsIbfk3BackReferences")] + public NodeModel? Parent { get; set; } #endregion } public static partial class TableExtensions { - public static MembersMember Find(this ITable table, int MemberId, int AttachedMemberId) + public static IsMemberOf Find(this ITable table, int NodeId, int NodeMemberId) { return table.FirstOrDefault(t => - t.MemberId == MemberId && - t.AttachedMemberId == AttachedMemberId); + t.NodeId == NodeId && + t.NodeMemberId == NodeMemberId); } - public static Node Find(this ITable table, int Id) + public static NodeModel Find(this ITable table, int Id) { return table.FirstOrDefault(t => t.Id == Id); diff --git a/UserService.DatabaseLayer/DataModels/UserDatabase.tt b/UserService.DatabaseLayer/DataModels/UserDatabase.tt index 17a0d55..3e44df9 100644 --- a/UserService.DatabaseLayer/DataModels/UserDatabase.tt +++ b/UserService.DatabaseLayer/DataModels/UserDatabase.tt @@ -6,11 +6,11 @@ <# //@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude" #> <# - NamespaceName = "DataModels"; + NamespaceName = "UserService.DatabaseLayer.DataModels"; // to configure GetSchemaOptions properties, add them here, before load metadata call - LoadMySqlMetadata("srvbo", "UserService", "UserDbAdmin", "12345678"); + LoadMySqlMetadata("srvbo", "UserService2", "UserDbAdmin", "12345678"); // LoadMySqlMetadata(string connectionString); // to adjust loaded database model before generation, add your code here, after load metadata, but before GenerateModel() call diff --git a/UserService.DatabaseLayer/DataModels/UserDbSettings.cs b/UserService.DatabaseLayer/DataModels/UserDbSettings.cs new file mode 100644 index 0000000..c1752ee --- /dev/null +++ b/UserService.DatabaseLayer/DataModels/UserDbSettings.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Linq; +using LinqToDB.Configuration; + +namespace UserService.DatabaseLayer.DataModels +{ + public class UserDbSettings : ILinqToDBSettings + { + public IEnumerable DataProviders => Enumerable.Empty(); + + public string DefaultConfiguration => "MySqlServer"; + public string DefaultDataProvider => "MySqlServer"; + + public IEnumerable ConnectionStrings + { + get + { + yield return new ConnectionStringSettings(); + } + } + } +} \ No newline at end of file diff --git a/UserService.DatabaseLayer/Repositories/BaseRepository.cs b/UserService.DatabaseLayer/Repositories/BaseRepository.cs new file mode 100644 index 0000000..befab63 --- /dev/null +++ b/UserService.DatabaseLayer/Repositories/BaseRepository.cs @@ -0,0 +1,13 @@ +using LinqToDB.Data; +using UserService.DatabaseLayer.DataModels; + +namespace UserService.DatabaseLayer.Repositories +{ + public abstract class BaseRepository + { + protected BaseRepository() + { + DataConnection.DefaultSettings = new UserDbSettings(); + } + } +} \ No newline at end of file diff --git a/UserService.DatabaseLayer/Repositories/IRepository.cs b/UserService.DatabaseLayer/Repositories/IRepository.cs index 15e3ac0..8df3c07 100644 --- a/UserService.DatabaseLayer/Repositories/IRepository.cs +++ b/UserService.DatabaseLayer/Repositories/IRepository.cs @@ -4,14 +4,15 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using DataModels; +using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repositories { public interface IRepository where T : class { - Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default); - Task GetAsync(Expression> predicate, CancellationToken token = default); + Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default); + Task GetAsync(Expression> predicate, CancellationToken token = default); Task AddAsync(T entity, CancellationToken token = default); Task UpdateAsync(T entity, CancellationToken token = default); Task DeleteAsync(T entity, CancellationToken token = default); diff --git a/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs b/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs index 3584b1d..5caa03b 100644 --- a/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs +++ b/UserService.DatabaseLayer/Repositories/OrganizationUnitsRepository.cs @@ -3,38 +3,34 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using DataModels; +using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repositories { public class OrganizationUnitsRepository : IOrganizationUnitsRepository { - /// - public async Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) + public Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task GetAsync(Expression> predicate, CancellationToken token = default) + public Task GetAsync(Expression> predicate, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task AddAsync(OrganizationUnit entity, CancellationToken token = default) + public Task AddAsync(OrganizationUnit entity, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task UpdateAsync(OrganizationUnit entity, CancellationToken token = default) + public Task UpdateAsync(OrganizationUnit entity, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task DeleteAsync(OrganizationUnit entity, CancellationToken token = default) + public Task DeleteAsync(OrganizationUnit entity, CancellationToken token = default) { throw new NotImplementedException(); } diff --git a/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs b/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs index ff6eea7..c1e0de5 100644 --- a/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs +++ b/UserService.DatabaseLayer/Repositories/SecurityGroupsRepository.cs @@ -5,40 +5,39 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using DataModels; +using LinqToDB; +using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repositories { public class SecurityGroupsRepository : ISecurityGroupsRepository { - /// - public async Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) + public Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) + { + + throw new NotImplementedException(); + } + + public Task GetAsync(Expression> predicate, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task GetAsync(Expression> predicate, CancellationToken token = default) + public Task AddAsync(SecurityGroup entity, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task AddAsync(SecurityGroup entity, CancellationToken token = default) + public Task UpdateAsync(SecurityGroup entity, CancellationToken token = default) { throw new NotImplementedException(); } - /// - public async Task UpdateAsync(SecurityGroup entity, CancellationToken token = default) - { - throw new NotImplementedException(); - } - - /// public async Task DeleteAsync(SecurityGroup entity, CancellationToken token = default) { - throw new NotImplementedException(); + await using var db = new UserService2DB(); + await db.NodeModels.DeleteAsync(x => x.Id == entity.Id, token).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/UserService.DatabaseLayer/Repositories/UsersRepository.cs b/UserService.DatabaseLayer/Repositories/UsersRepository.cs index db9998e..91b1cef 100644 --- a/UserService.DatabaseLayer/Repositories/UsersRepository.cs +++ b/UserService.DatabaseLayer/Repositories/UsersRepository.cs @@ -4,65 +4,99 @@ using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using DataModels; using LinqToDB; using LinqToDB.Data; +using UserService.DatabaseLayer.DataModels; +using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repositories { - public class UsersRepository : IUsersRepository + public class UsersRepository : BaseRepository, IUsersRepository { - public UsersRepository() - { - DataConnection.DefaultSettings = new MySettings(); - - } - /// - public async Task> GetAllAsync(Expression>? predicate = null, + public async Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) { - await using var db = new UserServiceDB(); - return await db.Users.LoadWith(x=> x.Member).LoadWith(x=> x.Member.Node).WhereOrDefault(predicate).ToListAsync(token: token).ConfigureAwait(false); + await using var db = new UserService2DB(); + var users = await db.NodeModels + .LoadWith(x=> x.Parent) + .Where(x => x.Discriminator == nameof(User)) + .WhereOrDefault(predicate) + .Select(x => new User + { + Id = x.Id, + CommonName = x.CommonName, + Description = x.Description, + FirstName = x.FirstName, + LastName = x.LastName, + IsActive = x.IsActive, + EMail = x.EMail, + ParentId = x.ParentId, + }) + .ToListAsync(token).ConfigureAwait(false); + return users; } /// - public async Task GetAsync(Expression> predicate, CancellationToken token = default) + public async Task GetAsync(Expression> predicate, CancellationToken token = default) { - await using var db = new UserServiceDB(); - var result = await db.Users.FirstOrDefaultAsync(predicate, token: token).ConfigureAwait(false); + await using var db = new UserService2DB(); + var result = await db.NodeModels + .Where(predicate) + .Select(x => new User + { + Id = x.Id, + CommonName = x.CommonName, + Description = x.Description, + FirstName = x.FirstName, + LastName = x.LastName, + IsActive = x.IsActive, + EMail = x.EMail + }).FirstOrDefaultAsync(token).ConfigureAwait(false); return result; } /// public async Task AddAsync(User entity, CancellationToken token = default) { - await using var db = new UserServiceDB(); - var nodeId = - await db.Nodes.InsertWithInt32IdentityAsync(() => new Node {CommonName = "holger"}, token: token); - await db.Members.InsertAsync(() => new Member {Id = nodeId}, token: token); + await using var db = new UserService2DB(); - await db.Users.InsertAsync(() => new User + await db.NodeModels.InsertAsync(() => new NodeModel { - Id = nodeId, + CommonName = entity.CommonName, FirstName = entity.FirstName, LastName = entity.LastName, - IsActive = entity.IsActive - - }, token: token).ConfigureAwait(false); + Description = entity.Description, + EMail = entity.EMail, + IsActive = entity.IsActive, + Discriminator = nameof(User), + }, token).ConfigureAwait(false); } /// public async Task UpdateAsync(User entity, CancellationToken token = default) { - throw new NotImplementedException(); + await using var db = new UserService2DB(); + + var changedRows = await db.NodeModels.UpdateAsync(x => new NodeModel + { + Id = entity.Id, + CommonName = entity.CommonName, + FirstName = entity.FirstName, + LastName = entity.LastName, + Description = entity.Description, + EMail = entity.EMail, + IsActive = entity.IsActive, + Discriminator = nameof(User), + }, token).ConfigureAwait(false); + return changedRows > 0; } /// public async Task DeleteAsync(User entity, CancellationToken token = default) { - await using var db = new UserServiceDB(); - await db.Users.DeleteAsync(x => x.Id == entity.Id, token: token); + await using var db = new UserService2DB(); + await db.NodeModels.DeleteAsync(x => x.Id == entity.Id, token).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj b/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj index 214b21f..9e90ae7 100644 --- a/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj +++ b/UserService.DatabaseLayer/UserService.DatabaseLayer.csproj @@ -22,6 +22,10 @@ + + + + diff --git a/UserService.Infrastructure/DataModels/Member.cs b/UserService.Infrastructure/DataModels/Member.cs index 56e8ed4..9ea2be4 100644 --- a/UserService.Infrastructure/DataModels/Member.cs +++ b/UserService.Infrastructure/DataModels/Member.cs @@ -4,8 +4,6 @@ namespace UserService.Infrastructure.DataModels { public abstract class Member : Node { - public ISet Members { get; set; } = new HashSet(); - public ISet MemberOf { get; set; } = null!; } } \ No newline at end of file diff --git a/UserService.Infrastructure/DataModels/Node.cs b/UserService.Infrastructure/DataModels/Node.cs index 5d7dfd5..0478d27 100644 --- a/UserService.Infrastructure/DataModels/Node.cs +++ b/UserService.Infrastructure/DataModels/Node.cs @@ -5,29 +5,15 @@ using System.ComponentModel.DataAnnotations; namespace UserService.Infrastructure.DataModels { - public abstract class Node : ICloneable, IComparable + public abstract class Node : ICloneable { - public Guid Id { get; set; } + public int Id { get; set; } [Required] public string CommonName { get; set; } = null!; public string? Description { get; set; } - public ISet Children { get; set; } = new SortedSet(); - public Node? Parent { get; set; } //Parent - public Guid? ParentId { get; set; } - public override string ToString() => CommonName; - - public int Level => Parent?.Level + 1 ?? 0; + public int? ParentId { get; set; } /// public virtual object Clone() => MemberwiseClone(); - - public int CompareTo(Node? other) - { - if (ReferenceEquals(this, other)) return 0; - if (other is null) 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.Infrastructure/DataModels/OrganizationUnit.cs b/UserService.Infrastructure/DataModels/OrganizationUnit.cs index 405278a..b048643 100644 --- a/UserService.Infrastructure/DataModels/OrganizationUnit.cs +++ b/UserService.Infrastructure/DataModels/OrganizationUnit.cs @@ -1,4 +1,6 @@ -namespace UserService.Infrastructure.DataModels +using System.Collections.Generic; + +namespace UserService.Infrastructure.DataModels { public class OrganizationUnit : Node { diff --git a/UserService.Infrastructure/DataModels/SecurityGroup.cs b/UserService.Infrastructure/DataModels/SecurityGroup.cs index 78d3a91..2034526 100644 --- a/UserService.Infrastructure/DataModels/SecurityGroup.cs +++ b/UserService.Infrastructure/DataModels/SecurityGroup.cs @@ -1,6 +1,9 @@ -namespace UserService.Infrastructure.DataModels +using System.Collections.Generic; + +namespace UserService.Infrastructure.DataModels { public class SecurityGroup : Member { + public ISet Members { get; set; } = new HashSet(); } } \ No newline at end of file diff --git a/UserService.Test/UnitTest1.cs b/UserService.Test/UnitTest1.cs index 644195b..7a5a433 100644 --- a/UserService.Test/UnitTest1.cs +++ b/UserService.Test/UnitTest1.cs @@ -1,34 +1,56 @@ using NUnit.Framework; +using System; using System.Threading.Tasks; -using DataModels; using UserService.DatabaseLayer.Repositories; +using UserService.Infrastructure.DataModels; namespace UserService.Test { - public class Tests + public class UserRepositoryTests { - [SetUp] - public void Setup() - { - } - [Test] + [Order(2)] public async Task Test1() { var usersRepository = new UsersRepository(); - var users = await usersRepository.GetAllAsync(); + var users = await usersRepository.GetAllAsync().ConfigureAwait(false); Assert.AreEqual(users.Count, 1); } [Test] + [Order(1)] public async Task Test2() { var usersRepository = new UsersRepository(); var user = new User { - FirstName = "Holger", LastName = "Börchers", IsActive = true + CommonName = "holger", + FirstName = "Holger", + LastName = "Börchers", + IsActive = true }; - await usersRepository.AddAsync(user); + await usersRepository.AddAsync(user).ConfigureAwait(false); + } + + [Test] + [Order(3)] + public async Task Test3() + { + var usersRepository = new UsersRepository(); + + var user = await usersRepository.GetAsync(x => x.CommonName == "holger").ConfigureAwait(false); + user.Description = DateTime.Now.ToString("O"); + await usersRepository.UpdateAsync(user).ConfigureAwait(false); + } + + [Test] + [Order(4)] + public async Task Test4() + { + var usersRepository = new UsersRepository(); + + var user = await usersRepository.GetAsync(x => x.CommonName == "holger").ConfigureAwait(false); + await usersRepository.DeleteAsync(user).ConfigureAwait(false); } } } \ No newline at end of file diff --git a/UserService/Pages/SecurityGroups.razor b/UserService/Pages/SecurityGroups.razor index 48af2b4..950269e 100644 --- a/UserService/Pages/SecurityGroups.razor +++ b/UserService/Pages/SecurityGroups.razor @@ -77,7 +77,7 @@ else diff --git a/UserService/Pages/SecurityGroups.razor.cs b/UserService/Pages/SecurityGroups.razor.cs index e8643ac..d109cb3 100644 --- a/UserService/Pages/SecurityGroups.razor.cs +++ b/UserService/Pages/SecurityGroups.razor.cs @@ -56,8 +56,8 @@ namespace UserService.Pages if (arg == null) throw new ArgumentNullException(nameof(arg)); var securityGroup = arg.Item; securityGroup.MapFields(arg.Values); - securityGroup.Parent = - OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.ParentId)]); + //securityGroup.Parent = + // OrganizationUnits?.FirstOrDefault(x => x.Id == (Guid?)arg.Values[nameof(Node.Parent.Id)]); var result = await SecurityGroupsRepository.UpdateAsync(securityGroup).ConfigureAwait(false); arg.Cancel = !result; } @@ -98,9 +98,7 @@ namespace UserService.Pages if (SelectedSecurityGroup is null) return; if (!SelectedSecurityGroup.Members.Add(new MembersMember { - MemberId = SelectedSecurityGroup.Id, Member = SelectedSecurityGroup, - AttachedMemberId = SelectedMember.Id, AttachedMember = SelectedMember })) { diff --git a/UserService/Pages/Users.razor b/UserService/Pages/Users.razor index 219f163..574180d 100644 --- a/UserService/Pages/Users.razor +++ b/UserService/Pages/Users.razor @@ -93,7 +93,7 @@ else