public async Task <Unit> Handle(RemoveOfferCommand request, CancellationToken cancellationToken)
        {
            var      userId = HttpContextAccessor.HttpContext?.User.FindFirstValue(ClaimTypes.NameIdentifier);
            BaseUser user   = _context.BaseUsers.Include(u => u.Offers).FirstOrDefault(u => u.Id == userId);

            if (user == null)
            {
                throw new CustomException(new Error
                {
                    ErrorType = ErrorType.Unauthorized,
                    Message   = Localizer["Unauthorized"]
                });
            }
            Domain.Models.Offer offer = await _context.Offers.Include(o => o.Avatar).
                                        FirstOrDefaultAsync(o => o.OfferId == request.OfferId, cancellationToken);

            if (!user.Offers.Contains(offer))
            {
                throw new CustomException(new Error
                {
                    ErrorType = ErrorType.Unauthorized,
                    Message   = Localizer["Unauthorized"]
                });
            }
            //TODO check if this offer blongs to user
            _context.Offers.Remove(offer);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
Esempio n. 2
0
        public async Task <CreateOfferViewModel> Handle(CreateOfferCommand request, CancellationToken cancellationToken)
        {
            var      userId = HttpContextAccessor.HttpContext?.User.FindFirstValue(ClaimTypes.NameIdentifier);
            BaseUser user   = _context.BaseUsers.FirstOrDefault(u => u.Id == userId);

            if (user == null)
            {
                throw new CustomException(new Error
                {
                    ErrorType = ErrorType.Unauthorized,
                    Message   = Localizer["Unauthorized"]
                });
            }
            var avatarObj = await _context.Files.FirstOrDefaultAsync(a => a.Id == request.AvatarId,
                                                                     cancellationToken);

            if (avatarObj == null)
            {
                throw new CustomException(new Error
                {
                    ErrorType = ErrorType.FileNotFound, Message = Localizer["FileNotFound"]
                });
            }

            Domain.Models.Offer offer = new Domain.Models.Offer
            {
                Title       = request.Title,
                Description = request.Description,
                Price       = request.Price,
                OfferType   = request.OfferType,
                BaseUser    = user,
                UserId      = user.Id,
                Avatar      = avatarObj,
                AvatarId    = request.AvatarId
            };
            await _context.Offers.AddAsync(offer, cancellationToken);

            await _context.SaveChangesAsync(cancellationToken);

            return(new CreateOfferViewModel
            {
                Offer = _mapper.Map <OfferDto>(offer)
            });
        }