示例#1
0
        public IActionResult Post([FromQuery] AdDTO ad)
        {
            var ads = new Ad
            {
                Title      = ad.Title,
                Body       = ad.Body,
                Price      = ad.Price,
                IsShipping = ad.IsShipping
            };

            _context.Ads.Add(ads);

            try
            {
                _context.SaveChanges();

                return(Created("/api/ads/" + ads.Id, new AdDTO
                {
                    Id = ads.Id,
                    Title = ad.Title,
                    Body = ad.Body,
                    Price = ad.Price,
                    IsShipping = ad.IsShipping
                }));
            }
            catch
            {
                return(StatusCode(500, "An error has occured."));
            }
        }
示例#2
0
        public async Task <IHttpActionResult> UnblockAd([FromUri] int adId)
        {
            AdDTO ad = await uow.AdService.GetAdById(adId);

            if (ad == null)
            {
                return(NotFound());
            }

            if (!ad.IsBlocked)
            {
                return(BadRequest("Ad is not blocked."));
            }

            var userId = this.User.Identity.GetUserId();

            if (userId == null || !User.IsInRole("Admin"))
            {
                return(this.Unauthorized());
            }


            await uow.ModeratorService.UnblockAd(adId);

            return(Ok("Ad is unblocked"));
        }
示例#3
0
文件: EditAd.cs 项目: bokasa/asp-api
        public void Execute(AdDTO request)
        {
            var ad = Context.Ads.Find(request.Id);

            if (ad == null)
            {
                throw new EntityNotFoundException();
            }

            if (ad.Title != request.Title)
            {
                if (Context.Ads.Any(p => p.Title == request.Title))
                {
                    throw new EntityExistException("This Title already exist.");
                }

                ad.Title = request.Title;
            }

            if (ad.Body != request.Body)
            {
                if (Context.Ads.Any(p => p.Body == request.Body))
                {
                    throw new EntityExistException("This Body already exist.");
                }

                ad.Body = request.Body;
            }

            ad.Price = request.Price;

            ad.IsShipping = request.IsShipping;

            Context.SaveChanges();
        }
示例#4
0
        public IActionResult Put(int id, [FromQuery] AdDTO ad)
        {
            var ads = _context.Ads.Find(id);

            if (ads == null)
            {
                return(NotFound());
            }

            if (ads.IsDeleted)
            {
                return(NotFound());
            }

            ads.Title      = ad.Title;
            ads.Body       = ad.Body;
            ads.Price      = ad.Price;
            ads.IsShipping = ad.IsShipping;

            try
            {
                _context.SaveChanges();
                return(NoContent());
            }
            catch (Exception)
            {
                return(StatusCode(500, "An error has occured."));
            }
        }
        public async Task <IHttpActionResult> DeleteAd([FromUri] int adId)
        {
            var authtor = await uow.UserService.GetUserById(User.Identity.GetUserId <int>());

            if (authtor == null)
            {
                return(this.Unauthorized());
            }

            if (authtor.IsBlocked)
            {
                return(BadRequest("Your account blocked."));
            }

            AdDTO ad = await uow.AdService.GetAdById(adId);

            if (ad == null)
            {
                return(NotFound());
            }

            if (ad.User.Id != authtor.Id)
            {
                return(BadRequest("It is not your post."));
            }

            if (!this.ModelState.IsValid)
            {
                return(BadRequest(this.ModelState));
            }

            await uow.AdService.DeleteAd(adId);

            return(Ok("Ad is deleted"));
        }
示例#6
0
        public async Task ManageAd(AdDTO adDTO)
        {
            var stemmedTitle = await AddToGlobalStrings(adDTO.Title);

            var stemmedDescription = await AddToGlobalStrings(adDTO.Description);

            var ad = new Ad
            {
                Title       = adDTO.Title,
                Description = adDTO.Description,
                Company     = adDTO.Company,
                Owner       = await _context.Users.Where(x => x.Id == Guid.Parse(adDTO.Owner.Id)).FirstOrDefaultAsync()
            };

            var finalGlobalRelations = await ToAdKnn(stemmedTitle, ad, true);

            var descriptionGlobalRelations = await ToAdKnn(stemmedDescription, ad, false);

            finalGlobalRelations.AddRange(descriptionGlobalRelations);

            await _context.AdKnns.AddRangeAsync(finalGlobalRelations);

            await _context.Ads.AddAsync(ad);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
示例#7
0
        public async Task <ActionResult <Ad> > PostAd([FromForm] AdDTO adDTO)
        {
            if (!UserExists(adDTO.User))
            {
                return(NotFound());
            }

            var maxAds = _options.PublishOptions.MaxAdsByUser;

            if (await _context.Users.Where(user => user.Id == adDTO.User).CountAsync() >= maxAds)
            {
                return(BadRequest());
            }

            var maxNumber = 0;

            if (await _context.Ads.CountAsync() > 0)
            {
                maxNumber = _context.Ads.Max(x => x.Number);
            }

            var adId     = Guid.NewGuid();
            var imageUrl = "";

            if (adDTO.Image != null)
            {
                IImageFileManager imageManager = new ImageFileManager(_options, _cacheController);
                imageUrl = imageManager.GenerateURL(adId.ToString(), adDTO.Image.FileName);
                try
                {
                    await imageManager.UploadImageAsync(adDTO.Image, imageUrl);
                }
                catch (Exception)
                {
                    return(Problem("Возникла ошибка при загрузке изображения", null,
                                   StatusCodes.Status500InternalServerError, "Ошибка загрузки изображения"));
                }
            }

            var ad = new Ad
            {
                Id       = adId,
                Created  = DateTime.Now,
                Number   = maxNumber + 1,
                Rating   = new Random().Next(-5, 10),
                User     = adDTO.User,
                Subject  = adDTO.Subject,
                Content  = adDTO.Content ?? adDTO.Subject,
                ImageURL = imageUrl
            };

            await _context.Ads.AddAsync(ad);

            await _context.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetAd), new { id = ad.Id }, ad));
        }
示例#8
0
        public async Task <IActionResult> ChangeStatus(AdDTO ad)
        {
            var changeCommand = new ChangeAdStatus()
            {
                Id = ad.Id, Status = ad.Status
            };

            await DispatcheAsync <ChangeAdStatus>(changeCommand);

            return(RedirectToAction("Index", "Admin"));
        }
示例#9
0
        public IActionResult CreateAd([FromBody] AdDTO ad)
        {
            Ad a = new Ad {
                AdType = ad.AdType, Price = ad.Price, CryptoCurrencyAmount = ad.Amount
            };

            a.AdUid      = Guid.NewGuid();
            a.Coin       = CoinsColl.Find <Coin>(x => x.Symbol == ad.Symbol).FirstOrDefault();
            a.Advertiser = Users.Find <User>(x => x.UserName == ad.Advertiser).FirstOrDefault();
            Collection.InsertOne(a);
            return(Ok(ad));
        }
示例#10
0
        public void Execute(AdDTO request)
        {
            var ad = Context.Ads.Find(request.Id);

            if (ad == null)
            {
                throw new EntityNotFoundException();
            }

            ad.IsDeleted = true;

            Context.SaveChanges();
        }
示例#11
0
        public async Task AddAd(AdDTO adDTO)
        {
            var ad = Mapper.Map <AdDTO, Ad>(adDTO);

            if (ad.PositionDescription != null)
            {
                await uow.Ad.Post(ad);
            }
            else
            {
                throw new ArgumentException("Wrong data");
            }
        }
示例#12
0
        public async Task <IActionResult> EditAd(AdDTO ad)
        {
            if (!ModelState.IsValid)
            {
                var categories = await _categoryService.BrowseDTOAsync();

                ViewBag.Categories = categories;
                return(View(ad));
            }
            await DispatcheAsync <EditUserAd>(_mapper.Map <EditUserAd>(ad));

            return(RedirectToAction("Index", "UserAd"));
        }
示例#13
0
        public async Task EditAd(AdDTO adDTO)
        {
            var ad = Mapper.Map <AdDTO, Ad>(adDTO);

            if (ad.UserId != 0)
            {
                await uow.Ad.Update(ad);
            }
            else
            {
                throw new ArgumentException("Wrong data");
            }
        }
示例#14
0
        public void Execute(AdDTO request)
        {
            Context.Ads.Add(new Domain.Ad
            {
                Title      = request.Title,
                Body       = request.Body,
                Price      = request.Price,
                IsShipping = request.IsShipping,
                CategoryId = request.CategoryId,
                UserId     = request.UserId
            });

            Context.SaveChanges();
        }
示例#15
0
 public ActionResult Delete(int id, AdDTO ad)
 {
     try
     {
         _deleteAdCommand.Execute(ad);
         return(RedirectToAction(nameof(Index)));
     }
     catch (EntityNotFoundException)
     {
         return(View());
     }
     catch (Exception)
     {
         return(RedirectToAction("index"));
     }
 }
示例#16
0
        public async Task <AdDTO> Ad()
        {
            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri("http://localhost:5011/");
            httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage httpResponseMessage = await httpClient.GetAsync("api/ad");

            var response = await httpResponseMessage.Content.ReadAsStringAsync();

            AdDTO adDTO = JsonConvert.DeserializeObject <AdDTO>(response);

            return(adDTO);
        }
示例#17
0
        public async Task <Result <IEnumerable <AdDTO> > > GetAds(string userId)
        {
            var user = await _context.Users.Where(x => x.Id == Guid.Parse(userId))
                       .Include(x => x.SkillKnns)
                       .Include("SkillKnns.GlobalString")
                       .FirstOrDefaultAsync();

            if (user == null)
            {
                return(Result <IEnumerable <AdDTO> > .CreateFailed(
                           HttpStatusCode.NotFound, "User not found"));
            }

            var ads = await _context.Ads
                      .Where(x => x.Owner != user && !x.UserAds.Select(y => y.User).Contains(user))
                      .Include(x => x.UserAds)
                      .Include("UserAds.User")
                      .Include(x => x.AdKnns)
                      .Include(x => x.Owner)
                      .Include("AdKnns.GlobalString")
                      .ToListAsync();

            double distance;
            var    topDistances = new List <Tuple <double, Ad> >();

            foreach (var ad in ads)
            {
                distance = _knnService.GetDistance(ad, user);
                if (topDistances.Count < 10)
                {
                    topDistances.Add(new Tuple <double, Ad>(distance, ad));
                }
                else
                {
                    var max     = topDistances.Max(x => x.Item1);
                    var maxItem = topDistances.Where(x => x.Item1 == max).FirstOrDefault();
                    if (max > distance)
                    {
                        topDistances[topDistances.IndexOf(maxItem)] = new Tuple <double, Ad>(distance, ad);
                    }
                }
            }

            var result = topDistances.Select(x => x.Item2);

            return(Result <IEnumerable <AdDTO> > .CreateSuccessful(AdDTO.ToAdDTOList(result)));
        }
        public async Task <IHttpActionResult> AddAd([FromUri] int categoryId)
        {
            var authtor = await uow.UserService.GetUserById(User.Identity.GetUserId <int>());

            if (authtor == null)
            {
                return(this.Unauthorized());
            }

            CategoryDTO category = await uow.CategoryService.GetCategoryById(categoryId);

            if (category == null)
            {
                return(NotFound());
            }

            if (authtor.IsBlocked)
            {
                return(BadRequest("Your account blocked."));
            }

            var httpRequest = HttpContext.Current.Request;  //get request object

            string positionDescriptionCode = httpRequest.Params["Ad"];
            string positionDescription     = Base64Decode(positionDescriptionCode); //decoding string with html tag

            AdDTO ad = new AdDTO
            {
                PositionName        = httpRequest.Params["PositionName"],
                Location            = httpRequest.Params["Location"],
                Company             = httpRequest.Params["Company"],
                PositionDescription = positionDescription,
                CreateDate          = DateTime.Now,
                UserId     = authtor.Id,
                CategoryId = 1
            };

            if (!this.ModelState.IsValid)
            {
                return(BadRequest(this.ModelState));
            }

            await uow.AdService.AddAd(ad);

            return(Content(HttpStatusCode.Created, "Ad is added"));
        }
示例#19
0
        public ActionResult Create(AdDTO ad)
        {
            if (!ModelState.IsValid)
            {
                return(View(ad));
            }

            try
            {
                _createAdCommand.Execute(ad);

                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception)
            {
                return(StatusCode(500, "An error has occured."));
            }
        }
示例#20
0
        public async Task <IActionResult> AddAd([FromBody] AdDTO ad)
        {
            try
            {
                var userId = User.Claims.Where(x => x.Type == "id").FirstOrDefault().Value;
                var result = await _adService.AddAd(userId, ad);

                if (!result.IsSuccess())
                {
                    return(result.ToErrorResponse());
                }
                return(Ok(result.Data));
            }
            catch (Exception)
            {
                return(BadRequest("Σφάλμα, Επικοινωνήστε με τον διαχειριστή"));
            }
        }
        public async Task <OperationDetails <int> > SaveAd(
            string userName,
            AdDTO ad,
            IFormFileCollection productPhotos)
        {
            OperationDetails <int> operationDetails = new OperationDetails <int>(false, "", 0);
            ApplicationUser        user             = new ApplicationUser();

            if (ad == null)
            {
                return(new OperationDetails <int>(false, "new Ad can't be null or empty", 0));
            }

            if (String.IsNullOrEmpty(userName))
            {
                return(operationDetails);
            }

            user = await _uof.UserRepository.FindUserByUserName(userName);

            if (user == null)
            {
                return(operationDetails);
            }

            var newAd = _dataService.TransformingAdDTOToAdEntities(ad);

            newAd.ApplicationUser = user;

            if (newAd.AdId == 0)
            {
                newAd.AdStatusId = (int)AdStatuses.Activated;
                newAd.IsModerate = true;
                operationDetails = await CreateAd(user, newAd, productPhotos);
            }
            else
            {
                newAd.AdStatusId = (int)AdStatuses.InProgress;
                newAd.IsModerate = false;
                operationDetails = await UpdateAd(user, newAd, productPhotos);
            }

            return(operationDetails);
        }
        public async Task <IHttpActionResult> EditAd([FromUri] int adId, [FromBody] AdEditViewModel newAd)
        {
            var authtor = await uow.UserService.GetUserById(User.Identity.GetUserId <int>());

            if (authtor == null)
            {
                return(this.Unauthorized());
            }

            if (authtor.IsBlocked)
            {
                return(BadRequest("Your account is blocked."));
            }

            AdDTO ad = await uow.AdService.GetAdById(adId);

            if (ad == null)
            {
                return(NotFound());
            }

            if (ad.User.Id != authtor.Id)
            {
                return(BadRequest("It is not your post."));
            }

            if (ad.IsBlocked)
            {
                return(BadRequest("As is blocked."));
            }

            ad.PositionName        = newAd.PositionName;
            ad.Location            = newAd.Location;
            ad.Company             = newAd.Company;
            ad.PositionDescription = newAd.PositionDescription;
            ad.User     = null;
            ad.Category = null;

            await uow.AdService.EditAd(ad);

            return(Ok("Ad is edited"));
        }
示例#23
0
        public void CreateAd(AdDTO ad)
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <AdDTO, Ad>()
                .ForMember(dest => dest.DateAdd, opt => opt.Ignore())
                .ForMember(dest => dest.Category, opt => opt.Ignore())
                .ForMember(dest => dest.Kind, opt => opt.Ignore())
                .ForMember(dest => dest.LocationNew, opt => opt.Ignore())
                .ForMember(dest => dest.User, opt => opt.Ignore());
                cfg.CreateMap <TagDTO, Tag>();
                cfg.CreateMap <ImageDTO, Image>();
            });

            var mapper   = config.CreateMapper();
            var adCreate = mapper.Map <AdDTO, Ad>(ad);

            DataBase.Ads.Create(adCreate);
            DataBase.Save();
        }
        public AdViewModel PrepearingAdViewModel(IQueryable <CityDTO> citiesDTO,
                                                 IQueryable <CityAreaDTO> cityAreasDTO,
                                                 IQueryable <ProductTypeDTO> productTypesDTO,
                                                 IQueryable <ProductModelsDTO> productModelsDTO,
                                                 IQueryable <ProductMemorieDTO> productMemoriesDTO,
                                                 IQueryable <ProductColorDTO> productColorsDTO,
                                                 IQueryable <ProductStateDTO> productStateDTO,
                                                 AdDTO ad)
        {
            AdViewModel prepearingModel = new AdViewModel {
                AdDTO = ad
            };

            prepearingModel.CityesSelectList    = new SelectList(citiesDTO, "Id", "Name");
            prepearingModel.CityAreasSelectList = new SelectList(cityAreasDTO, "Id", "Name");

            if (ad.Characteristics != null)
            {
                prepearingModel.ProductModelsSelectList = new SelectList(productModelsDTO.Where(x => x.ProductTypeId == ad.Characteristics.ProductType.ProductTypesId), "Id", "Name");
            }
            else
            {
                prepearingModel.ProductModelsSelectList = new SelectList(productModelsDTO, "Id", "Name");
            }


            prepearingModel.ProductTypesSelectList =
                new SelectList(productTypesDTO, "Id", "Name");

            prepearingModel.ProductMemoriesSelectList =
                new SelectList(productMemoriesDTO, "Id", "StorageSize");

            prepearingModel.ProductColorsSelectList =
                new SelectList(productColorsDTO, "Id", "Name");

            prepearingModel.ProductStatesSelectList =
                new SelectList(productStateDTO, "Id", "Name");

            return(prepearingModel);
        }
示例#25
0
        public void EditAd(AdDTO ad)
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <AdDTO, Ad>()
                .ForMember(dest => dest.DateAdd, opt => opt.Ignore())
                .ForMember(dest => dest.Category, opt => opt.Ignore())
                .ForMember(dest => dest.Kind, opt => opt.Ignore())
                .ForMember(dest => dest.LocationNew, opt => opt.Ignore())
                .ForMember(dest => dest.User, opt => opt.Ignore())
                .ForMember(dest => dest.UserId, opt => opt.Ignore());
                cfg.CreateMap <ImageDTO, Image>();
                cfg.CreateMap <TagDTO, Tag>()
                .ForMember(t => t.InfoReviewTags, p => p.Ignore());
            });

            var mapper = config.CreateMapper();
            var adEdit = mapper.Map <AdDTO, Ad>(ad);

            DataBase.Ads.Update(adEdit);
            //DataBase.Save();
        }
        public AdDTO TransformingAdToAdDTO(Ad ad)
        {
            var adDTO = new AdDTO
            {
                AdId            = ad.AdId,
                Title           = ad.Title,
                Description     = ad.Description,
                Price           = ad.Price,
                DateCreated     = ad.DateCreated,
                DateUpdated     = ad.DateUpdated,
                Characteristics = ad.Characteristics,
                City            = ad.City,
                Photos          = ad.Photos,
                AdViews         = ad.AdViews,
                AdStatusId      = ad.AdStatusId,
                IsModerate      = ad.IsModerate,
                Purhcases       = ad.Purhcases,
                ApplicationUser = ad.ApplicationUser
            };

            return(adDTO);
        }
        public Ad TransformingAdDTOToAdEntities(AdDTO ad)
        {
            Characteristics characteristics = new Characteristics
            {
                ProductType = new ProductTypes {
                    ProductTypesId = ad.SelectedProductTypeId
                },
                ProductModel = new ProductModels {
                    ProductModelsId = ad.SelectedProductModelId
                },
                ProductMemorie = new ProductMemories {
                    ProductMemoriesId = ad.SelectedProductMemoryId
                },
                ProductColor = new ProductColors {
                    ProductColorsId = ad.SelectedProductColorId
                },
                ProductState = new ProductStates {
                    ProductStatesId = ad.SelectedProductStateId
                }
            };

            Ad Ad = new Ad
            {
                Title       = ad.Title,
                Description = ad.Description,
                Price       = ad.Price,
                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now,
                City        = new City {
                    CityId = ad.SelectedCityId
                },
                Characteristics = characteristics,
                IsModerate      = ad.IsModerate,
                AdStatusId      = ad.AdStatusId
            };

            return(Ad);
        }
示例#28
0
        public ActionResult Edit(int id, AdDTO ad)
        {
            if (!ModelState.IsValid)
            {
                return(View(ad));
            }

            try
            {
                _editAdCommand.Execute(ad);
                return(RedirectToAction(nameof(Index)));
            }
            catch (EntityExistException)
            {
                TempData["error"] = "Ad already exist!";
            }
            catch (EntityNotFoundException)
            {
                return(RedirectToAction(nameof(Index)));
            }

            return(View());
        }
示例#29
0
        public async Task <Result <IEnumerable <AdDTO> > > GetMyAds(string userId)
        {
            var user = await _context.Users.Where(x => x.Id == Guid.Parse(userId))
                       .Include(x => x.SkillKnns)
                       .Include("SkillKnns.GlobalString")
                       .FirstOrDefaultAsync();

            if (user == null)
            {
                return(Result <IEnumerable <AdDTO> > .CreateFailed(
                           HttpStatusCode.NotFound, "User not found"));
            }

            var ads = await _context.Ads
                      .Where(x => x.Owner == user)
                      .Include(x => x.UserAds)
                      .Include("UserAds.User")
                      .Include(x => x.AdKnns)
                      .Include(x => x.Owner)
                      .Include("AdKnns.GlobalString")
                      .ToListAsync();

            return(Result <IEnumerable <AdDTO> > .CreateSuccessful(AdDTO.ToAdDTOList(ads)));
        }
示例#30
0
        public async Task <Result <bool> > AddAd(string userId, AdDTO adDTO)
        {
            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(Result <bool> .CreateFailed(
                           HttpStatusCode.NotFound, "User not found"));
            }

            await _knnService.ManageAd(adDTO);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception)
            {
                return(Result <bool> .CreateFailed(
                           HttpStatusCode.InternalServerError, "Cound't add ad"));
            }

            return(Result <bool> .CreateSuccessful(true));
        }