コード例 #1
0
ファイル: AuctionService.cs プロジェクト: Strachu/Auctioneer
		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();
		}
コード例 #2
0
ファイル: AuctionService.cs プロジェクト: Strachu/Auctioneer
		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);
		}
コード例 #3
0
ファイル: AuctionService.cs プロジェクト: Strachu/Auctioneer
		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;
		}
コード例 #4
0
ファイル: AuctionService.cs プロジェクト: Strachu/Auctioneer
		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);
			}
		}
コード例 #5
0
ファイル: AuctionService.cs プロジェクト: Strachu/Auctioneer
		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;
		}