protected override async Task<ValidationResult> IsValidAsync(object value, ValidationContext validationContext)
 {
     // get validation data
     var newBid = (double)value;
     var auctionBid = (AuctionBid)validationContext.ObjectInstance;
     
     // determine bid abuse
     var service = new AuctionService();
     var isAbuse = await service.IsBidAbuseAsync(auctionBid, newBid);
     
     return isAbuse
         ? new ValidationResult("Your bid has been detected to be an abuse")
         : ValidationResult.Success;
 }
        protected override async Task<ValidationResult> IsValidAsync(object value, ValidationContext validationContext)
        {
            // get validation data
            var newBid = (double)value;
            var auctionBid = (AuctionBid)validationContext.ObjectInstance;
            
            // get actual current bid value
            var service = new AuctionService();
            var currentBid = await service.GetCurrentBidAsync(auctionBid);

            // perform validation
            return (newBid > auctionBid.CurrentBid && newBid <= currentBid)
                ? new ValidationResult("Your bid has been surpassed.")
                : ValidationResult.Success;
        }