public async Task MoveAuction(int auctionId, int newCategoryId, string movingUserId, IValidationErrorNotifier errors) { var auction = await this.GetById(auctionId); if(!await CanBeMoved(auction, movingUserId)) { errors.AddError(Lang.Show.CannotMove); return; } auction.CategoryId = newCategoryId; await mContext.SaveChangesAsync(); }
public async Task Buyout(int auctionId, string buyerId, IValidationErrorNotifier errors) { var auction = await GetById(auctionId); if(!auction.IsBuyoutEnabled) { errors.AddError(Lang.Buy.BuyoutNotEnabled); return; } if(!CanBeBought(auction, buyerId, errors)) return; auction.Offers.Add(new BuyOffer { UserId = buyerId, Date = DateTime.Now, Amount = auction.BuyoutPrice.Amount, }); await mContext.SaveChangesAsync(); await mUserNotifier.NotifyAuctionSold(auction.Seller, auction); await mUserNotifier.NotifyAuctionWon(auction.Buyer, auction); }
private bool CanBeBought(Auction auction, string buyerId, IValidationErrorNotifier errors) { if(auction.Status != AuctionStatus.Active) { errors.AddError(Lang.Buy.AuctionIsInactive); return false; } if(auction.SellerId == buyerId) { errors.AddError(Lang.Buy.CannotBuyOwnAuctions); return false; } return true; }
public async Task Bid(int auctionId, string buyerId, decimal bidAmount, IValidationErrorNotifier errors) { var auction = await GetById(auctionId); if(!auction.IsBiddingEnabled) { errors.AddError(Lang.Buy.BiddingNotEnabled); return; } if(!CanBeBought(auction, buyerId, errors)) return; if(bidAmount < auction.MinBidAllowed) { errors.AddError(String.Format(Lang.Buy.TooLowBid, new Money(auction.MinBidAllowed, auction.MinimumPrice.Currency))); return; } var previouslyBestOffer = auction.BestOffer; var userOffer = new BuyOffer { UserId = buyerId, Date = DateTime.Now, Amount = bidAmount, }; auction.Offers.Add(userOffer); await mContext.SaveChangesAsync(); await mUserNotifier.NotifyOfferAdded(userOffer.User, userOffer, auction); if(previouslyBestOffer != null) { await mUserNotifier.NotifyOutbid(previouslyBestOffer.User, auction); } }
private async Task<bool> CanBeRemoved(Auction auction, string userId, IValidationErrorNotifier errors) { if(auction.SellerId != userId && !await mUserService.IsUserInRole(userId, "Admin")) { errors.AddError(Lang.Delete.WrongUser); return false; } if(auction.Offers.Any()) { errors.AddError(Lang.Delete.BuyOfferHasBeenMade); return false; } if(auction.Status != AuctionStatus.Active) { errors.AddError(Lang.Delete.AuctionIsInactive); return false; } return true; }