/// <summary>
        ///     Create a <see cref="UserClaim"/>.
        /// </summary>
        /// <param name="userId">The user Id.</param>
        /// <param name="claims">The claims.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task Create(Guid userId, IEnumerable <UserClaim> claims, DependentTransaction transaction = null)
        {
            if (userId == Guid.Empty)
            {
                throw new ArgumentException("Invalid user Id", nameof(userId));
            }

            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    foreach (var userClaim in claims)
                    {
                        await db.Administration.UserClaims
                        .Value(c => c.UserId, userId)
                        .Value(c => c.ClaimType, userClaim.ClaimType)
                        .Value(c => c.ClaimValue, userClaim.ClaimValue)
                        .InsertAsync();
                    }

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }
                }
            }
        }
        /// <summary>
        ///     Delete a <see cref="UserClaim"/>.
        /// </summary>
        /// <param name="userClaim">The user claim.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <bool> Delete(UserClaim userClaim, DependentTransaction transaction = null)
        {
            if (userClaim.UserId == Guid.Empty || string.IsNullOrEmpty(userClaim.ClaimType) || string.IsNullOrEmpty(userClaim.ClaimValue))
            {
                throw new InvalidOperationException("Invalid claim");
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var result = await db.Administration.UserClaims.Where(x =>
                                                                          x.UserId == userClaim.UserId && x.ClaimType == userClaim.ClaimType &&
                                                                          x.ClaimValue == userClaim.ClaimValue).DeleteAsync();

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1);
                }
            }
        }
        /// <summary>
        ///     Update national Id.
        /// </summary>
        /// <param name="userId">The user Id.</param>
        /// <param name="nationalId">The national Id.</param>
        /// <param name="nationalIdVerificationDateUtc">The national Id verification date.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <bool> UpdateNationalId(Guid userId, string nationalId, DateTime?nationalIdVerificationDateUtc, DependentTransaction transaction = null)
        {
            if (userId == Guid.Empty)
            {
                throw new ArgumentException("Invalid user Id", nameof(userId));
            }
            if (string.IsNullOrEmpty(nationalId))
            {
                throw new ArgumentException("Invalid national Id", nameof(nationalId));
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var result = await db.Administration.Users.Where(x => x.Id == userId)
                                 .Set(u => u.NationalId, nationalId)
                                 .Set(u => u.NationalIdVerificationDateUtc, nationalIdVerificationDateUtc)
                                 .Set(u => u.ChangedOn, DateTime.UtcNow)
                                 .UpdateAsync();

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1);
                }
            }
        }
        /// <summary>
        ///     Create a <see cref="Administration.UserAddress"/>.
        /// </summary>
        /// <param name="userId">The user Id.</param>
        /// <param name="userAddress"></param>
        /// <param name="transaction">The transaction.</param>
        public async Task <Guid> Create(Guid userId, UserAddress userAddress, DependentTransaction transaction = null)
        {
            if (userId == Guid.Empty)
            {
                throw new ArgumentException("Invalid user Id", nameof(userId));
            }
            if (userAddress.Id != Guid.Empty)
            {
                throw new InvalidOperationException("Id has to be empty guid");
            }
            if (userAddress.Address == null)
            {
                throw new InvalidOperationException("UserAddress is required");
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var id            = Guid.NewGuid();
                    var userAddressId = Guid.NewGuid();
                    var result        = await db.Utility.Addresses
                                        .Value(c => c.Id, id)
                                        .Value(c => c.Address1, userAddress.Address.Address1)
                                        .Value(c => c.Address2, userAddress.Address.Address2)
                                        .Value(c => c.AddressTypeId, userAddress.Address.AddressTypeId)
                                        .Value(c => c.City, userAddress.Address.City)
                                        .Value(c => c.County, userAddress.Address.County)
                                        .Value(c => c.CountryId, userAddress.Address.CountryId)
                                        .Value(u => u.State, userAddress.Address.State)
                                        .Value(u => u.Zip, userAddress.Address.Zip)
                                        .Value(u => u.CreatedOn, DateTime.UtcNow)
                                        .Value(u => u.ChangedOn, DateTime.UtcNow)
                                        .InsertAsync();

                    if (result == 1)
                    {
                        await db.Administration.UserAddresses
                        .Value(c => c.Id, userAddressId)
                        .Value(c => c.UserId, userId)
                        .Value(c => c.AddressId, id)
                        .Value(c => c.Preffered, userAddress.Preffered)
                        .InsertAsync();
                    }

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(userAddressId);
                }
            }
        }
Пример #5
0
        public async void CanGetReferences()
        {
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.Utility.References.AsQueryable().ToListAsync();

                Assert.True(items.Any(), "Failed to find references");
            }
        }
        /// <summary>
        ///     Create a <see cref="User"/>.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <Guid> Create(User user, DependentTransaction transaction = null)
        {
            if (user.Id != Guid.Empty)
            {
                throw new InvalidOperationException("Id has to be empty guid");
            }

            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var id     = Guid.NewGuid();
                    var result = await db.Administration.Users
                                 .Value(c => c.Id, id)
                                 .Value(c => c.UserName, user.UserName)
                                 .Value(c => c.Email, user.Email)
                                 .Value(c => c.PasswordHash, user.PasswordHash)
                                 .Value(c => c.SecurityStamp, Guid.NewGuid().ToString())
                                 .Value(c => c.PhoneNumber, user.PhoneNumber)
                                 .Value(c => c.MobileNumber, user.MobileNumber)
                                 .Value(c => c.NationalId, user.NationalId)
                                 .Value(c => c.EmailConfirmed, true)
                                 .Value(c => c.PhoneNumberConfirmed, true)
                                 .Value(c => c.MobileNumberConfirmed, true)
                                 .Value(c => c.LockoutEnabled, false)
                                 .Value(c => c.AccessFailedCount, 0)
                                 .Value(c => c.TwoFactorEnabled, false)
                                 .Value(c => c.CreatedOn, DateTime.UtcNow)
                                 .InsertAsync();

                    // Create user profile
                    if (user.Profile != null)
                    {
                        await Create(id, user.Profile, Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete));
                    }

                    // Create user claim
                    if (user.Claims != null && user.Claims.Any())
                    {
                        await Create(id, user.Claims, Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete));
                    }

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1 ? id : Guid.Empty);
                }
            }
        }
        /// <summary>
        ///     All references.
        /// </summary>
        /// <returns><see cref="IEnumerable{Reference}" />.</returns>
        public async Task <IEnumerable <Reference> > All()
        {
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <UtilitySchema.Reference>()
                            .GroupJoin(db.GetTable <UtilitySchema.ReferenceItem>(), reference => reference.Id, referenceItem => referenceItem.ReferenceId, (parent, child) => Build(parent, child.ToList()))
                            .ToListAsync();

                return(items);
            }
        }
        /// <summary>
        ///     All users.
        /// </summary>
        /// <returns><see cref="IEnumerable{User}" />.</returns>
        public async Task <IEnumerable <User> > All()
        {
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <AdministrationSchema.User>().Take(1000)
                            .LeftJoin(db.GetTable <AdministrationSchema.UserProfile>(),
                                      (user, userProfile) => user.Id == userProfile.UserId, (user, userProfile) => new { user, userProfile })
                            .GroupJoin(db.GetTable <AdministrationSchema.UserClaim>(), user => user.user.Id, userClaim => userClaim.UserId, (parent, claims) => Build(parent.user, parent.userProfile, claims.ToList()))
                            .ToListAsync();

                return(items);
            }
        }
        /// <summary>
        ///     Get reference.
        /// </summary>
        /// <param name="id">The Id</param>
        /// <returns><see cref="Reference" />.</returns>
        public async Task <Reference> Get(Guid id)
        {
            if (id == Guid.Empty)
            {
                throw new ArgumentException("Invalid id", nameof(id));
            }
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <UtilitySchema.Reference>().Where(x => x.Id == id)
                            .GroupJoin(db.GetTable <UtilitySchema.ReferenceItem>(), reference => reference.Id, referenceItem => referenceItem.ReferenceId, (parent, child) => Build(parent, child.ToList()))
                            .ToListAsync();

                return(items.FirstOrDefault());
            }
        }
        /// <summary>
        ///     Update a <see cref="Administration.UserAddress"/>.
        /// </summary>
        /// <param name="userAddress">The user address.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <bool> Update(UserAddress userAddress, DependentTransaction transaction = null)
        {
            if (userAddress.Id == Guid.Empty)
            {
                throw new InvalidOperationException("Invalid Id");
            }
            if (userAddress.Address == null)
            {
                throw new ArgumentException("Invalid address");
            }
            if (userAddress.Address.Id == Guid.Empty)
            {
                throw new ArgumentException("Invalid address Id");
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var result = await db.Administration.UserAddresses.Where(x => x.Id == userAddress.Id)
                                 .Set(u => u.Preffered, userAddress.Preffered)
                                 .UpdateAsync();

                    // Update the address
                    await db.Utility.Addresses.Where(x => x.Id == userAddress.Address.Id)
                    .Set(u => u.Address1, userAddress.Address.Address1)
                    .Set(u => u.Address2, userAddress.Address.Address2)
                    .Set(u => u.AddressTypeId, userAddress.Address.AddressTypeId)
                    .Set(u => u.City, userAddress.Address.City)
                    .Set(u => u.County, userAddress.Address.County)
                    .Set(u => u.CountryId, userAddress.Address.CountryId)
                    .Set(u => u.State, userAddress.Address.State)
                    .Set(u => u.Zip, userAddress.Address.Zip)
                    .Set(u => u.ChangedOn, DateTime.UtcNow)
                    .UpdateAsync();

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1);
                }
            }
        }
        /// <summary>
        ///     UserAddress.
        /// </summary>
        /// <param name="id">The user address Id.</param>
        /// <returns></returns>
        public async Task <UserAddress> UserAddress(Guid id)
        {
            if (id == Guid.Empty)
            {
                throw new ArgumentException("Invalid id", nameof(id));
            }
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <AdministrationSchema.UserAddress>().Where(x => x.Id == id)
                            .LeftJoin(db.GetTable <UtilitySchema.Address>(),
                                      (userAddress, address) => userAddress.AddressId == address.Id, (userAddress, address) => Build(userAddress, address))
                            .ToListAsync();

                return(items.FirstOrDefault());
            }
        }
        /// <summary>
        ///     Handles the request.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IEnumerable <User> > Handle(GetUsersQuery request, CancellationToken cancellationToken)
        {
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <AdministrationSchema.User>().Where(x => x.Id != null)
                            .LeftJoin(db.GetTable <AdministrationSchema.UserProfile>(),
                                      (user, userProfile) => user.Id == userProfile.UserId,
                                      (user, userProfile) => new { user, userProfile })
                            .GroupJoin(db.GetTable <AdministrationSchema.UserClaim>(), user => user.user.Id,
                                       userClaim => userClaim.UserId,
                                       (parent, claims) =>
                                       AdministrationManager.Build(parent.user, parent.userProfile, claims.ToList()))
                            .ToListAsync();

                return(items);
            }
        }
        /// <summary>
        ///     Get user by user name.
        /// </summary>
        /// <param name="userName">The user name.</param>
        /// <returns></returns>
        public async Task <User> Get(string userName)
        {
            if (string.IsNullOrEmpty(userName))
            {
                throw new ArgumentException("Invalid user name", nameof(userName));
            }
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <AdministrationSchema.User>().Where(x => x.UserName == userName)
                            .LeftJoin(db.GetTable <AdministrationSchema.UserProfile>(),
                                      (user, userProfile) => user.Id == userProfile.UserId, (user, userProfile) => new { user, userProfile })
                            .GroupJoin(db.GetTable <AdministrationSchema.UserClaim>(), user => user.user.Id, userClaim => userClaim.UserId, (parent, claims) => Build(parent.user, parent.userProfile, claims.ToList()))
                            .ToListAsync();

                return(items.FirstOrDefault());
            }
        }
        /// <summary>
        ///     Create a <see cref="UserProfile"/>.
        /// </summary>
        /// <param name="userId">The user Id.</param>
        /// <param name="userProfile">The user profile.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <Guid> Create(Guid userId, UserProfile userProfile, DependentTransaction transaction = null)
        {
            if (userId == Guid.Empty)
            {
                throw new ArgumentException("Invalid user Id", nameof(userId));
            }

            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    await db.Administration.UserProfiles
                    .Value(c => c.UserId, userId)
                    .Value(c => c.LastName, userProfile.LastName)
                    .Value(c => c.FirstName, userProfile.FirstName)
                    .Value(c => c.UserTypeId, userProfile.UserTypeId)
                    .Value(c => c.GenderId, userProfile.GenderId)
                    .Value(c => c.CountryId, userProfile.CountryId)
                    .Value(u => u.Title, userProfile.Title)
                    .Value(u => u.Suffix, userProfile.Suffix)
                    .Value(u => u.Prefix, userProfile.Prefix)
                    .Value(u => u.PrefferedName, userProfile.PrefferedName)
                    .Value(u => u.Dob, userProfile.Dob)
                    .Value(u => u.Organization, userProfile.Organization)
                    .Value(u => u.Department, userProfile.Department)
                    .Value(c => c.PictureUrl, userProfile.PictureUrl)
                    .InsertAsync();

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(userId);
                }
            }
        }
Пример #15
0
        public async void CanCreateUser()
        {
            var random = DateTime.Now.ToString("MMddyyhhmmssfff");

            using (var db = new PRACTISEV1DB())
            {
                try
                {
                    db.BeginTransaction();

                    var guid   = Guid.NewGuid();
                    var result = await db.Administration.Users
                                 .Value(c => c.Id, Guid.NewGuid())
                                 .Value(c => c.UserName,
                                        $"{DataGenerator.GenerateRandomName(1).FirstOrDefault()?.Item1}-{random}")
                                 .Value(c => c.Email,
                                        $"{DataGenerator.GenerateRandomName(1).FirstOrDefault().Item1}-{random}@testing.com")
                                 .Value(c => c.PasswordHash,
                                        _passwordStorage.HashPassword(new AdministrationSchema.User(), "testdb99!!"))
                                 .Value(c => c.SecurityStamp, Guid.NewGuid().ToString())
                                 .Value(c => c.PhoneNumber, "123-456-7890")
                                 .Value(c => c.EmailConfirmed, true)
                                 .Value(c => c.PhoneNumberConfirmed, true)
                                 .Value(c => c.MobileNumberConfirmed, true)
                                 .Value(c => c.LockoutEnabled, false)
                                 .Value(c => c.AccessFailedCount, 0)
                                 .Value(c => c.TwoFactorEnabled, false)
                                 .Value(c => c.CreatedOn, DateTime.UtcNow)
                                 .InsertAsync();

                    db.CommitTransaction();
                    Assert.True(result == 1, "Failed to create user");
                }
                catch (Exception ex)
                {
                    db.RollbackTransaction();
                    throw ex;
                }
            }
        }
        /// <summary>
        ///     Update a <see cref="UserProfile"/>.
        /// </summary>
        /// <param name="userProfile">The user profile.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public async Task <bool> Update(UserProfile userProfile, DependentTransaction transaction = null)
        {
            if (userProfile.UserId == Guid.Empty)
            {
                throw new InvalidOperationException("Invalid user Id");
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var result = await db.Administration.UserProfiles.Where(x => x.UserId == userProfile.UserId)
                                 .Set(u => u.LastName, userProfile.LastName)
                                 .Set(u => u.FirstName, userProfile.FirstName)
                                 .Set(u => u.UserTypeId, userProfile.UserTypeId)
                                 .Set(u => u.GenderId, userProfile.GenderId)
                                 .Set(u => u.CountryId, userProfile.CountryId)
                                 .Set(u => u.Title, userProfile.Title)
                                 .Set(u => u.Suffix, userProfile.Suffix)
                                 .Set(u => u.Prefix, userProfile.Prefix)
                                 .Set(u => u.PrefferedName, userProfile.PrefferedName)
                                 .Set(u => u.Dob, userProfile.Dob)
                                 .Set(u => u.Organization, userProfile.Organization)
                                 .Set(u => u.Department, userProfile.Department)
                                 .Set(u => u.PictureUrl, userProfile.PictureUrl)
                                 .UpdateAsync();

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1);
                }
            }
        }
Пример #17
0
        /// <summary>
        ///     Handles the request.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <User> Handle(GetUserQuery request, CancellationToken cancellationToken)
        {
            if (request.Id == Guid.Empty)
            {
                throw new ArgumentException("Invalid id", nameof(request.Id));
            }
            using (var db = new PRACTISEV1DB())
            {
                var items = await db.GetTable <AdministrationSchema.User>().Where(x => x.Id == request.Id)
                            .LeftJoin(db.GetTable <AdministrationSchema.UserProfile>(),
                                      (user, userProfile) => user.Id == userProfile.UserId,
                                      (user, userProfile) => new { user, userProfile })
                            .GroupJoin(db.GetTable <AdministrationSchema.UserClaim>(), user => user.user.Id,
                                       userClaim => userClaim.UserId,
                                       (parent, claims) =>
                                       AdministrationManager.Build(parent.user, parent.userProfile, claims.ToList()))
                            .ToListAsync();

                await _mediator.Publish(new GetUsersNotification(items?.FirstOrDefault()?.Profile?.FirstName, items?.FirstOrDefault()?.Profile?.LastName));

                return(items.FirstOrDefault());
            }
        }
        /// <summary>
        ///     Update a <see cref="User"/>.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="transaction">Thr transaction.</param>
        /// <returns></returns>
        public async Task <bool> Update(User user, DependentTransaction transaction = null)
        {
            if (user.Id == Guid.Empty)
            {
                throw new InvalidOperationException("Invalid user Id");
            }
            using (var tx = transaction != null
                ? new TransactionScope(transaction, TransactionScopeAsyncFlowOption.Enabled)
                : new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var db = new PRACTISEV1DB())
                {
                    var result = await db.Administration.Users.Where(x => x.Id == user.Id)
                                 .Set(u => u.Email, user.Email)
                                 .Set(u => u.PhoneNumber, user.PhoneNumber)
                                 .Set(u => u.MobileNumber, user.MobileNumber)
                                 .Set(u => u.ChangedOn, DateTime.UtcNow)
                                 .UpdateAsync();

                    // Update user profile
                    if (user.Profile != null && user.Profile.UserId != Guid.Empty)
                    {
                        await Update(user.Profile, Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete));
                    }

                    tx.Complete();

                    if (transaction != null)
                    {
                        transaction.Complete();
                    }

                    return(result == 1);
                }
            }
        }