public async Task <TypedResult <UserOutDto> > CreateUser(UpdateUserDtoIn updateUserIn)
        {
            try
            {
                var newUser = new UserEntity()
                {
                    UserId      = Guid.NewGuid(),
                    Email       = updateUserIn.Email,
                    ReportingTo = updateUserIn.ReportingTo,
                    Name        = new NameEntity()
                    {
                        FirstName          = updateUserIn.Name.FirstName,
                        LastName           = updateUserIn.Name.LastName,
                        MiddleName         = updateUserIn.Name.MiddleName,
                        Salutation         = updateUserIn.Name.Salutation,
                        PreferredFirstName = updateUserIn.Name.PreferredFirstName
                    },
                    Roles  = updateUserIn.Roles.Select(x => x.ToString()),
                    Status = updateUserIn.Status
                };

                await UserCollection.InsertOneAsync(newUser);

                return(new SuccessfulTypedResult <UserOutDto>(UserOutDto.EntityToOutDto(newUser)));
            }
            catch (Exception e)
            {
                return(new FailedTypedResult <UserOutDto>(e));
            }
        }
        public async Task <TypedResult <UserOutDto> > UpdateUser(Guid userId, UpdateUserDtoIn newUserId)
        {
            try
            {
                var foundUser = (await UserCollection.FindAsync(c => c.UserId == userId)).FirstOrDefault();
                if (foundUser == null)
                {
                    return(new NotFoundTypedResult <UserOutDto>());
                }

                foundUser.Name = new NameEntity()
                {
                    FirstName          = newUserId.Name.FirstName,
                    LastName           = newUserId.Name.LastName,
                    MiddleName         = newUserId.Name.MiddleName,
                    Salutation         = newUserId.Name.Salutation,
                    PreferredFirstName = newUserId.Name.PreferredFirstName
                };
                foundUser.Email       = newUserId.Email;
                foundUser.ReportingTo = newUserId.ReportingTo;
                foundUser.Status      = newUserId.Status;
                foundUser.Roles       = newUserId.Roles.Select(x => x.ToString());

                await UserCollection.ReplaceOneAsync(u => u.UserId == userId, foundUser, new ReplaceOptions()
                {
                    IsUpsert = false
                });

                return(new SuccessfulTypedResult <UserOutDto>(UserOutDto.EntityToOutDto(foundUser)));
            }
            catch (Exception e)
            {
                return(new FailedTypedResult <UserOutDto>(e));
            }
        }