Esempio n. 1
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));
        }
Esempio n. 2
0
        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());
        }