/// <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); }
/// <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)); }
/// <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()); }
/// <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()); }
/// <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); }
/// <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()); }