예제 #1
0
        public async Task <ActionResult> PlaceBet(BetViewModel model)
        {
            if (ModelState.IsValid)
            {
                var betModel = new BetModel
                {
                    LotId   = model.LotId,
                    UserId  = User.Identity.GetUserId(),
                    Sum     = model.Sum,
                    BetDate = DateTime.UtcNow
                };

                var result = await _betService.AddAsync(betModel);

                if (result.Succedeed)
                {
                    TempData["BetAccepted"] = "Your bet has been accepted";
                    return(RedirectToAction("Details", "Lots", new { id = model.LotId }));
                }

                foreach (var error in result.ValidationResults)
                {
                    ModelState.AddModelError(error.MemberNames.First(), error.ErrorMessage);
                }
            }

            return(PartialView("PlaceBetPartial"));
        }
        public ActionResult EditRate(int rateId, int eventId)
        {
            var bets      = _businessLayer.GetBets(rateId);
            var betsmodel = new List <BetViewModel>();

            for (int i = 0; i < bets.Count; i++)
            {
                var model = new BetViewModel()
                {
                    Bet = bets[i]
                };
                if (bets[i].ResultType == "Score")
                {
                    var score = bets[i].ResultValue.Split(':');
                    model.Score1 = int.Parse(score[0]);
                    model.Score2 = int.Parse(score[1]);
                }
                betsmodel.Add(model);
            }
            var           sportEvent = _businessLayer.GetSportEvent(eventId);
            BetsViewModel viewModel  = new BetsViewModel()
            {
                Bets = betsmodel, SportEvent = sportEvent, RateId = rateId
            };

            return(View(viewModel));
        }
예제 #3
0
        public async Task <IActionResult> InsureBet([FromBody] BetViewModel model)
        {
            string id   = User.FindFirst("id").Value;
            User   user = await UserManager.FindByIdAsync(id);


            return(Ok());
        }
예제 #4
0
        public async Task <bool> CompleteBet(BetViewModel betToComplete)
        {
            if (betToComplete.Profit == null)
            {
                return(false);
            }

            return(await GenericUpdateBet(betToComplete));
        }
예제 #5
0
        public async Task <bool> UpdateBet(BetViewModel betToUpdate)
        {
            if (betToUpdate == null)
            {
                return(false);
            }

            return(await GenericUpdateBet(betToUpdate));
        }
예제 #6
0
        public async Task <bool> AddBet(BetViewModel newBet)
        {
            // TODO Map betviewmodel to CreateBetDto
            var betDto = new CreateBetDto();

            var successfullyCreatedBet = await
                                         _httpClient.ExecutePostRequest <CreateBetDto, BetDto>(betDto, _configProvider.CreateBetResourceUrl, true);

            return(successfullyCreatedBet != null);
        }
예제 #7
0
        public async Task <bool> AddBet(BetViewModel betToAdd)
        {
            if (betToAdd == null)
            {
                return(false);
            }

            var success = await _betService.AddBet(betToAdd);

            return(success);
        }
예제 #8
0
        public ActionResult Create(BetViewModel bet)
        {
            bool   status = false;
            string message;

            User          loggedinUser = (User)Session["LoggedInUser"];
            UpcomingMatch match        = (UpcomingMatch)Session["SelectedMatch"];
            UserService   userservice  = new UserService();

            if (ModelState.IsValid)
            {
                if (bet.Amount > 5)
                {
                    if (bet.Amount < loggedinUser.Balance)
                    {
                        Bet newbet = new Bet()
                        {
                            UserID     = loggedinUser.UserID,
                            MatchID    = match.MatchID,
                            Prediction = bet.Prediction,
                            Amount     = bet.Amount
                        };

                        status = betservice.CreateBet(newbet);
                        if (status == true)
                        {
                            message = "Bet succesfully placed!";
                            userservice.RemoveFunds(loggedinUser, newbet.Amount);
                        }
                        else
                        {
                            message = "Database Error!";
                        }
                    }
                    else
                    {
                        message = "Not enough funds to make this bet.";
                    }
                }
                else
                {
                    message = "Bet amount must be higher than 5,- or try to use a comma.";
                }
            }
            else
            {
                message = "Invalid request.";
            }

            ViewBag.Status  = status;
            ViewBag.Message = message;

            return(View(bet));
        }
예제 #9
0
        public async Task <bool> DeleteBet(BetViewModel betToDelete)
        {
            if (betToDelete == null)
            {
                return(false);
            }

            var deleteBetResourceUrl = $"{_configProvider.DeleteBetResourceUlr}/{betToDelete.Id}";

            await _httpClient.ExecuteDeleteRequest(deleteBetResourceUrl, true);

            return(true);
        }
예제 #10
0
        public async Task AddBet(BetViewModel betViewModel)
        {
            var betEntity = new Bet
            {
                BetDateUtc = betViewModel.BetDateUtc,
                BookMaker  = new BookMaker
                {
                    Name = betViewModel.BookMaker.Name
                },
                Profit = betViewModel.Profit
            };

            await _betRepository.AddBet(betEntity);
        }
예제 #11
0
 public Bet(BetViewModel model, string userId)
 {
     TradeId      = model.TradeId;
     BuyerId      = model.BuyerId;
     DateBet      = DateTime.UtcNow;
     DateUpdate   = DateTime.UtcNow;
     IsActual     = true;
     IsRedemption = model.IsRedemption;
     // LotsCount = model.LotsCount;
     Price        = model.Price;
     Volume       = model.Volume;
     AspNetUserId = userId;
     LotId        = model.LotId;
     DateBet      = DateTime.UtcNow;
     LotsCount    = model.LotsCount;
 }
예제 #12
0
        public async Task <bool> UpdateBet(BetViewModel betToUpdate)
        {
            if (betToUpdate == null)
            {
                return(false);
            }

            // TODO Map BetViewModel to UpdateBetDto
            var updateBetDto = new UpdateBetDto();

            var updateResourceUrl = $"{_configProvider.UpdateBetResourceUrl}/{betToUpdate.Id}";

            var updatedBet = await _httpClient.ExecutePostRequest <UpdateBetDto, BetDto>(updateBetDto, updateResourceUrl, true);

            return(updatedBet != null);
        }
예제 #13
0
        public ActionResult <Bet> Post([FromBody] BetViewModel bet)
        {
            var user    = rocketDbContext.Users.Find(bet.UserId);
            var contest = rocketDbContext.Contests.Find(bet.ContestId);

            if (user == null || contest == null)
            {
                throw new KeyNotFoundException();
            }
            if (contest.IsOpen == false)
            {
                throw new Exception("Contest is not open !");
            }

            var duplicateExists = rocketDbContext.Bets.Where(x => x.UserId == bet.UserId && x.ContestId == bet.ContestId).SingleOrDefault();

            if (duplicateExists != null)
            {
                throw new Exception("Duplicate found !");
            }

            var newBet = new Bet
            {
                Id        = bet.Id,
                User      = user,
                Contest   = contest,
                Amount    = bet.Amount,
                Outcome   = bet.Outcome,
                Timestamp = DateTimeOffset.Now
            };

            rocketDbContext.Bets.Add(newBet);
            var newTransaction = new Transaction
            {
                Type    = 1,
                Amount  = bet.Amount,
                Comment = $"Placed a bet of {bet.Amount}",
                UserId  = user.Id
            };

            rocketDbContext.Transactions.Add(newTransaction);
            rocketDbContext.SaveChanges();

            return(CreatedAtAction(nameof(Post), new { id = newBet.Id }, newBet));
        }
예제 #14
0
        public async Task <IActionResult> InsureBet([FromBody] BetViewModel model)
        {
            string id   = User.FindFirst("id").Value;
            User   user = await UserManager.FindByIdAsync(id);

            if (user == null)
            {
                return(Unauthorized());
            }

            /*
             * bool exists = await DataContext.Store.AnyAsync<Bet>(b =>
             *  b.SlipNumber == model.SlipNumber
             *  && b.PlatformId == model.PlatformId);
             *
             * if (exists) return BadRequest($"The bet slip {model.SlipNumber} has already been registered on this platform.");
             */

            bool alreadyRegistered = await DataContext.Store.AnyAsync <Bet>(b =>
                                                                            b.SlipNumber == model.SlipNumber &&
                                                                            b.UserId == user.Id &&
                                                                            b.PlatformId == model.PlatformId
                                                                            );

            // if (alreadyRegistered) return BadRequest($"The bet slip {model.SlipNumber} has already been registered by the current user");

            if (user.Wallet.AvailableBalance < model.Stake)
            {
                return(BadRequest("Insufficient insurance funds"));
            }

            Bet bet = Mapper.Map <Bet>(model);
            await user.AddBetAsync(bet);

            await EmailService.SendEmailAsync(user.Email, $"Bet {bet.SlipNumber} has been successfully insured", $"Hello {user.FirstName} your bet ({bet.SlipNumber}) has successfully been insured. Best Of Luck!");

            await SmsService.SendMessage(user.FormattedPhoneNumber, $"Hello {user.FirstName} your bet ({bet.SlipNumber}) has successfully been insured. Best Of Luck!");

            await PaymentService.CreateTransaction(user.Wallet, model.Stake, TransactionType.Debit, ChannelType.Chop9ja);

            return(Ok());
        }
예제 #15
0
        public ActionResult BetList()
        {
            User loggedInUser = (User)Session["LoggedInUser"];

            if (loggedInUser != null)
            {
                List <Bet> betList = new List <Bet>();
                betList = betservice.GetBetsFromUser(loggedInUser);

                BetViewModel betmodel = new BetViewModel();

                betmodel.BetList = betList;

                return(View(betList));
            }
            else
            {
                return(RedirectToAction("Login", "User"));
            }
        }
예제 #16
0
        public ActionResult Create()
        {
            User loggedInUser = (User)Session["LoggedInUser"];

            UpcomingMatch match = (UpcomingMatch)Session["SelectedMatch"];

            bool betExists = betservice.CheckIfBetExists(match.MatchID, loggedInUser.UserID);

            if (betExists == false)
            {
                BetViewModel newbet = new BetViewModel
                {
                    Match = match
                };

                return(View(newbet));
            }
            else
            {
                return(RedirectToAction("UpcomingMatches", "Match"));
            }
        }
예제 #17
0
        private async Task <bool> GenericUpdateBet(BetViewModel betToComplete)
        {
            var success = await _betService.UpdateBet(betToComplete);

            return(success);
        }
예제 #18
0
        public Bet(HomeItem data)
        {
            BindingContext = betViewModel = new BetViewModel();
            NavigationPage.SetHasNavigationBar(this, true);

            Title           = "Bet for " + data.title;
            BackgroundColor = Color.Bisque;

            var layout = new StackLayout
            {
                Padding = 10,
            };
            var sublayout = new StackLayout
            {
                Padding = 10,
            };
            var ItemName = new Label
            {
                Text            = " Item Name : " + data.title,
                TextColor       = Color.White,
                BackgroundColor = Color.Blue,
                FontSize        = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };

            // name.SetBinding(Label.TextProperty, BetViewModel.NamePropertyName);
            sublayout.Children.Add(ItemName);

            var ItemRef = new Label
            {
                Text            = "Ref : " + data.id,
                TextColor       = Color.White,
                BackgroundColor = Color.Blue,
                FontSize        = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };

            var Ref = new Entry {
                Text = data.id
            };

            betViewModel.ItemRef = data.id;
            sublayout.Children.Add(ItemRef);

            var SellerName = new Label
            {
                Text            = " Seller Name : " + data.Name,
                TextColor       = Color.White,
                BackgroundColor = Color.Blue,
                FontSize        = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };

            // name.SetBinding(Label.TextProperty, BetViewModel.NamePropertyName);
            sublayout.Children.Add(SellerName);

            var currentPrice = new Label
            {
                Text            = "Current Price : " + data.price,
                TextColor       = Color.White,
                FontSize        = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                BackgroundColor = Color.Blue
            };

            // currentPrice.SetBinding(Entry.TextProperty, data.description);
            sublayout.Children.Add(currentPrice);

            var Description = new Label
            {
                Text            = "Description : " + data.description,
                TextColor       = Color.White,
                FontSize        = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                BackgroundColor = Color.Blue
            };

            // currentPrice.SetBinding(Entry.TextProperty, data.description);
            sublayout.Children.Add(Description);

            layout.Children.Add(sublayout);

            var newPrice = new Entry {
                Placeholder = "Enter Price", TextColor = Color.Gray, Text = "", Keyboard = Keyboard.Numeric
            };

            newPrice.SetBinding(Entry.TextProperty, BetViewModel.PricePropertyName);
            NumericValidationBehavior.SetAttachBehavior(newPrice, true);
            layout.Children.Add(newPrice);

            var BetButton = new Button
            {
                Text            = "Bet",
                TextColor       = Color.White,
                BackgroundColor =
                    Color.LawnGreen
            };

            BetButton.SetBinding(Button.CommandProperty, BetViewModel.BetCommandPropertyName);
            layout.Children.Add(BetButton);

            Content = layout;
        }