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)); }
public async Task <IActionResult> PutAd(Guid id, [FromForm] AdDTO adDTO) { var ad = await _context.Ads.FindAsync(id); if (ad == null) { return(NotFound()); } if (adDTO.User != Guid.Empty) { if (!UserExists(adDTO.User)) { return(NotFound()); } ad.User = adDTO.User; } if (!string.IsNullOrEmpty(adDTO.Subject)) { ad.Subject = adDTO.Subject; } if (!string.IsNullOrEmpty(adDTO.Content)) { ad.Content = adDTO.Content; } if (adDTO.Image != null) { IImageFileManager imageManager = new ImageFileManager(_options, _cacheController); var imageUrl = imageManager.GenerateURL(ad.Id.ToString(), adDTO.Image.FileName); try { await imageManager.UploadImageAsync(adDTO.Image, imageUrl); } catch (Exception) { return(Problem("Возникла ошибка при загрузке изображения", null, StatusCodes.Status500InternalServerError, "Ошибка загрузки изображения")); } } _context.Entry(ad).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!AdExists(id)) { return(NotFound()); } else { throw; } } return(Ok()); }