示例#1
0
        /// <summary>
        /// Updates the information.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        /// <exception cref="EntityNotFoundException">User id {model.UserId} not found</exception>
        /// <exception cref="FormatException">
        /// Address not nullable
        /// </exception>
        public async Task <bool> UpdateInfo(UserEditInfoModel model)
        {
            // TODO handle update email in user account, if google or facebook account don't allow update
            var user = _userProfileRepository.GetById(model.UserId);

            if (user == null)
            {
                throw new EntityNotFoundException($"User id {model.UserId} not found");
            }
            if (!ValidateUtils.IsNumber(model.Phone) || model.Phone.ToCharArray().Length != 10)
            {
                throw new FormatException($"{model.Phone} is wrong format");
            }

            if (ValidateUtils.IsNullOrEmpty(model.Address))
            {
                throw new FormatException($"Address not nullable");
            }

            if (model.Address != null)
            {
                user.Address = model.Address;
            }
            if (model.Phone != null)
            {
                user.Phone = model.Phone;
            }
            _userProfileRepository.Update(user);
            await _unitOfWork.CommitAsync();

            return(true);
        }
示例#2
0
        /// <summary>
        /// Searches the user.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <List <UserSearchViewModel> > SearchUser(UserSearchModel model)
        {
            const string defaultSort = "Name ASC";
            var          sortType    = model.IsSortDesc ? "DESC" : "ASC";
            var          sortField   = ValidateUtils.IsNullOrEmpty(model.SortField)
                ? defaultSort
                : $"{model.SortField} {sortType}";
            var query = _userProfileRepository.GetManyAsNoTracking(x =>
                                                                   ValidateUtils.IsNullOrEmpty(model.Name) ||
                                                                   x.FirstName.ToUpper().Contains(model.Name.ToUpper()) &&
                                                                   ValidateUtils.IsNullOrEmpty(model.Name) ||
                                                                   x.LastName.ToUpper().Contains(model.Name.ToUpper()) &&
                                                                   ValidateUtils.IsNullOrEmpty(model.Phone) ||
                                                                   x.Phone.Equals(model.Name) &&
                                                                   ValidateUtils.IsNullOrEmpty(model.Email) ||
                                                                   x.Email.ToUpper().Contains(model.Email.ToUpper()))
                        .Select(x => new UserSearchViewModel
            {
                Address = x.Address,
                UserId  = x.UserProfileId,
                Email   = x.Email,
                Name    = $"{x.FirstName} {x.LastName}"
            });
            var result = query.Skip((model.Page - 1) * model.PageSize)
                         .Take(model.PageSize);

            return(result.ToList());
        }
        public async Task <string> SearchCompany(CompanySearchModel model)
        {
            string defaultSort = "CompanyName ASC";
            string sortType    = model.IsSortDesc ? "DESC" : "ASC";
            string sortField   = ValidateUtils.IsNullOrEmpty(model.SortField) ? defaultSort : $"{model.SortField} {sortType}";
            var    query       = _AdministratorRepository.GetManyAsNoTracking(x =>
                                                                              (ValidateUtils.IsNullOrEmpty(model.AdminUserName) || x.UserName == model.AdminUserName))
                                 .Select(x => new
            {
                x.Id,
                x.UserName,
            })
                                 .Join(_CompanyRepository.GetManyAsNoTracking(x =>
                                                                              (ValidateUtils.IsNullOrEmpty(model.Address) || x.Address.ToUpper().Contains(model.AdminUserName.ToUpper())) &&
                                                                              (ValidateUtils.IsNullOrEmpty(model.Capital) || x.Capital.ToUpper().Contains(model.Capital.ToUpper())) &&
                                                                              (ValidateUtils.IsNullOrEmpty(model.CompanyName) || x.CompanyName.ToUpper().Contains(model.CompanyName.ToUpper()))
                                                                              ), x => x.Id, y => y.AdminId, (x, y) => new CompanyViewSearchModel
            {
                AdminUserName = x.UserName,
                Address       = y.Address,
                Capital       = y.Capital,
                CompanyId     = y.Id,
                CompanyName   = y.CompanyName,
                OptionPoll    = y.OptionPoll,
                TotalShares   = y.TotalShares
            }).OrderBy(sortField);
            var count = await query.CountAsync();

            var result = query.Skip((model.Page - 1) * model.PageSize)
                         .Take(model.PageSize)
                         .ToList();

            return(ApiResponse.Ok(result, count));
        }
示例#4
0
        /// <summary>
        /// Searches the shareholder.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <List <ShareholderSearchViewModel> > SearchShareholder(ShareholderSearchModel model)
        {
            const string defaultSort = "Name ASC";
            var          sortType    = model.IsSortDesc ? "DESC" : "ASC";
            var          sortField   = ValidateUtils.IsNullOrEmpty(model.SortField)
                ? defaultSort
                : $"{model.SortField} {sortType}";
            var query = _userProfileRepository.GetManyAsNoTracking(x =>
                                                                   (ValidateUtils.IsNullOrEmpty(model.Name) || x.FirstName.ToUpper().Contains(model.Name.ToUpper())) &&
                                                                   (ValidateUtils.IsNullOrEmpty(model.Name) || x.LastName.ToUpper().Contains(model.Name.ToUpper())))
                        .Select(x => new
            {
                x.UserProfileId,
                name = $"{x.FirstName} {x.LastName}",
                x.Email
            })
                        .Join(_shareholderRepository.GetAllAsNoTracking(),
                              x => x.UserProfileId, y => y.UserProfileId, (x, y) => new ShareholderSearchViewModel
            {
                Id    = y.ShareholderId,
                Email = x.Email,
                Name  = x.name,
                ShareholderTypeCode = y.ShareholderTypeCode
            }).OrderBy(sortField);
            var result = query.Skip((model.Page - 1) * model.PageSize)
                         .Take(model.PageSize);

            return(result.ToList());
        }
示例#5
0
        /// <summary>
        /// Searches the company.
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        /// <exception cref="UnauthorizedUser"></exception>
        public async Task <List <CompanyViewSearchModel> > SearchCompany(string userId, CompanySearchModel model)
        {
            if (ValidateUtils.IsNullOrEmpty(userId))
            {
                throw new UnauthorizedUser();
            }
            const string defaultSort = "CompanyName ASC";
            var          sortType    = model.IsSortDesc ? "DESC" : "ASC";
            var          sortField   = ValidateUtils.IsNullOrEmpty(model.SortField)
                ? defaultSort
                : $"{model.SortField} {sortType}";
            var query = _companyRepository.GetManyAsNoTracking(x =>
                                                               (ValidateUtils.IsNullOrEmpty(model.CompanyName) ||
                                                                x.CompanyName.ToUpper().Contains(model.CompanyName.ToUpper()))
                                                               ).Join(_shareholderRepository.GetManyAsNoTracking(x => x.UserProfileId == Guid.Parse(userId))
                                                                      , x => x.CompanyId, y => y.CompanyId, (x, y) => new
            {
                x.Address,
                x.Phone,
                x.Capital,
                x.CompanyId,
                x.AdminProfileId,
                x.CompanyName,
                x.CompanyDescription,
                x.OptionPollAmount,
                x.TotalShares,
                x.Categories,
                x.PhotoUrl
            }).Join(_userRepository.GetAll(),
                    x => x.AdminProfileId, y => y.UserProfileId, (x, y) => new CompanyViewSearchModel
            {
                Address            = x.Address,
                Phone              = x.Phone,
                Capital            = x.Capital,
                CompanyId          = x.CompanyId,
                AdminProfileId     = x.AdminProfileId,
                CompanyName        = x.CompanyName,
                CompanyDescription = x.CompanyDescription,
                OptionPollAmount   = x.OptionPollAmount,
                TotalShares        = x.TotalShares,
                AdminName          = $"{y.FirstName} {y.LastName}",
                Categories         = x.Categories,
                PhotoUrl           = x.PhotoUrl
            })
                        .OrderBy(sortField);
            var result = query.Skip((model.Page - 1) * model.PageSize)
                         .Take(model.PageSize);

            return(result.ToList());
        }
示例#6
0
        /// <summary>
        /// Updates the address.
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <param name="address">The address.</param>
        /// <returns></returns>
        /// <exception cref="EntityNotFoundException">User id {id} not found</exception>
        /// <exception cref="FormatException">Address not nullable</exception>
        public async Task <UserProfile> UpdateAddress(Guid id, string address)
        {
            var user = _userProfileRepository.GetById(id);

            if (user == null)
            {
                throw new EntityNotFoundException($"User id {id} not found");
            }
            if (ValidateUtils.IsNullOrEmpty(address))
            {
                throw new FormatException($"Address not nullable");
            }

            user.Address = address;
            _userProfileRepository.Update(user);
            await _unitOfWork.CommitAsync();

            return(user);
        }
示例#7
0
        /// <summary>
        /// Create the specified model.
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        /// <exception cref="UnauthorizedUser"></exception>
        public async Task <Company> CreateCompany(string userId, CompanyCreateModel model)
        {
            if (ValidateUtils.IsNullOrEmpty(userId))
            {
                throw new UnauthorizedUser();
            }
            var company = new Company
            {
                AdminProfileId     = Guid.Parse(userId),
                CompanyName        = model.CompanyName,
                CompanyDescription = model.CompanyDescription,
                Address            = model.Address,
                Phone       = model.Phone,
                Capital     = model.Capital,
                TotalShares = model.TotalShares,
            };
            var inserted = _companyRepository.Insert(company).Entity;
            await _unitOfWork.CommitAsync();

            return(inserted);
        }
        public async Task <List <SearchResultProductModel> > SearchProduct(ProductSearchModel model)
        {
            const string defaultSort = "ProductName ASC";
            var          sortType    = model.IsSortDesc ? "DESC" : "ASC";
            var          sortField   = ValidateUtils.IsNullOrEmpty(model.SortField)
                ? defaultSort
                : $"{model.SortField} {sortType}";
            var query = _productRepository.GetManyAsNoTracking(x =>
                                                               ValidateUtils.IsNullOrEmpty(model.ProductName) || x.Name.ToUpper().Contains(model.ProductName))
                        .Select(x => new SearchResultProductModel
            {
                ProductId   = x.ProductId,
                CategoryId  = x.CategoryId,
                Description = x.Description,
                ImageLink   = x.ImageLink,
                Name        = x.Name,
                Price       = x.Price
            });
            var result = query.Skip((model.Page - 1) * model.PageSize)
                         .Take(model.PageSize);

            return(result.ToList());
        }