public bool ValidateUserBet(MatchResults results, UserBet userBet) { string matchScore = results.Results["FT"]; int home = int.Parse(matchScore.Split('-')[0].Trim()); int away = int.Parse(matchScore.Split('-')[1].Trim()); return((userBet.BetType.Equals("tw_home") && home > away) || (userBet.BetType.Equals("tw_draw") && home == away) || (userBet.BetType.Equals("tw_away") && home < away)); }
private string GetDebitDetail(BE.UserBet userbet, BE.User user) { XElement detail = new XElement("BetDetail", new XElement("BetType", "single"), new XElement("UserUID", user.UID), new XElement("TransactionID", userbet.TransactionID), new XElement("MatchCode", userbet.MatchCode), new XElement("MatchName", userbet.MatchName), new XElement("BetName", userbet.BetType), new XElement("BetPrice", userbet.BetPrice), new XElement("BetAmount", userbet.Amount), new XElement("Date", DateTime.UtcNow) ); return(detail.ToString(SaveOptions.DisableFormatting)); }
public List <BE.UserBet> GetUserBets(string userToken) { List <BE.UserBet> returnValue = new List <BE.UserBet>(); using (var db = new BE.ADOLDBEntities()) { var userBets = db.UserBets.Where(p => p.User.SessionToken.Equals(userToken)).ToList(); foreach (var userBet in userBets) { BE.UserBet item = new BE.UserBet(); var sportOdd = userBet.SportBet; item = userBet; item.SportBet = sportOdd; returnValue.Add(item); } } return(returnValue); }
public bool ValidateUserBet(MatchResults results, UserBet userBet) { return(false); }
private BE.BaseResponse <bool> ProcessSingleBets(List <Tuple <int, decimal, string> > bets, BE.User user) { Dictionary <BE.UserBet, BE.BaseWalletResponseData> userBets = new Dictionary <BE.UserBet, BE.BaseWalletResponseData>(); //SportEventsAccess sea = new SportEventsAccess(); UserBetAccess uba = new UserBetAccess(); var withErrors = false; foreach (var bet in bets) { var sportbet = sea.GetSportBet(bet.Item1); var userbet = new BE.UserBet(); userbet.UserID = user.ID; userbet.SportBetID = sportbet.ID; userbet.MatchCode = sportbet.SportEvent.Code; userbet.MatchName = sportbet.SportEvent.Name; userbet.PaymentStatus = null; userbet.Hit = null; userbet.TransactionID = Guid.NewGuid().ToString(); userbet.LinkedCode = null; var oddProvider = userbet.GetOddProvider(sportbet.Code); userbet.BetType = bet.Item3; userbet.Amount = bet.Item2; userbet.BetPrice = oddProvider.GetOddValue(bet.Item3, sportbet); string detail = GetDebitDetail(userbet, user); BE.DebitRequest req = new BE.DebitRequest(); req.Amount = userbet.Amount; req.BetDetail = detail; req.EventID = userbet.MatchCode; req.EventName = userbet.MatchName; req.SessionToken = user.SessionToken; req.UserUID = user.UID; req.TransactionID = userbet.TransactionID; var betValidated = BetValidatorExtension.ValidateBet(sportbet.SportEvent.Sport.Code, userbet.Amount, userbet.BetPrice, user.Balance); if (betValidated.Status.Equals(ResponseStatus.OK) && betValidated.GetData()) { BE.BaseResponse <BE.BaseWalletResponseData> response = UserWalletFacade.ProcessBetDebit(req); userBets.Add(userbet, response.GetData()); if (response.Status.Equals(BE.ResponseStatus.Fail)) { RequestContextHelper.LastError = response.Message; withErrors = true; break; } RequestContextHelper.SessionToken = response.GetData().SessionToken; RequestContextHelper.UserBalance = response.GetData().Balance; RequestContextHelper.UserName = response.GetData().NickName; user.SessionToken = response.GetData().SessionToken; user.Balance = response.GetData().Balance; } else { return(new BaseResponse <bool>(false, ResponseStatus.Fail, betValidated.Message)); } } if (withErrors) { new Thread(delegate() { DoRollBack(userBets); }).Start(); } else { if (!uba.StoreUserBet(userBets.Keys.ToList())) { new Thread(delegate() { DoRollBack(userBets); }).Start(); return(new BE.BaseResponse <bool>(false, BE.ResponseStatus.Fail, "No se pudo guardar la apuesta por un error interno")); } } UserAccess ua = new UserAccess(); user = ua.UpdateUser(user); return(new BE.BaseResponse <bool>(true, BE.ResponseStatus.OK)); }
private BE.BaseResponse <bool> ProcessCombinedBets(decimal betAmount, List <Tuple <int, decimal, string> > bets, BE.User user) { List <BE.UserBet> userBets = new List <BE.UserBet>(); //SportEventsAccess sea = new SportEventsAccess(); string transaction = Guid.NewGuid().ToString(); decimal totalBetPrice = 1M; List <string> sportCodes = new List <string>(); foreach (var bet in bets) { var sportbet = sea.GetSportBet(bet.Item1); var userbet = new BE.UserBet(); userbet.UserID = user.ID; userbet.SportBetID = sportbet.ID; userbet.MatchCode = sportbet.SportEvent.Code; userbet.MatchName = sportbet.SportEvent.Name; userbet.PaymentStatus = null; userbet.Hit = null; userbet.TransactionID = transaction; userbet.LinkedCode = transaction; var oddProvider = userbet.GetOddProvider(sportbet.Code); userbet.BetType = bet.Item3; userbet.Amount = userBets.Count > 0 ? 0M : betAmount; totalBetPrice *= oddProvider.GetOddValue(bet.Item3, sportbet); userBets.Add(userbet); sportCodes.Add(sportbet.SportEvent.Sport.Code); } userBets.ForEach(p => p.BetPrice = totalBetPrice); string detail = GetDebitDetail(userBets, user); BE.DebitRequest req = new BE.DebitRequest(); req.Amount = userBets[0].Amount; req.BetDetail = detail; req.EventID = string.Join(",", userBets.Select(p => p.MatchCode).ToArray()); req.EventName = string.Join(",", userBets.Select(p => p.MatchName).ToArray()); req.SessionToken = user.SessionToken; req.UserUID = user.UID; req.TransactionID = userBets[0].TransactionID; Dictionary <BE.UserBet, BE.BaseWalletResponseData> combinedBet = new Dictionary <BE.UserBet, BE.BaseWalletResponseData>(); var validatedBet = BetValidatorExtension.ValidateBet(sportCodes.ToArray(), totalBetPrice, betAmount, user.Balance); if (validatedBet.Status.Equals(ResponseStatus.OK) && validatedBet.GetData()) { BE.BaseResponse <BE.BaseWalletResponseData> response = UserWalletFacade.ProcessBetDebit(req); if (response.Status.Equals(BE.ResponseStatus.Fail)) { RequestContextHelper.LastError = response.Message; userBets.ForEach(ub => combinedBet.Add(ub, response.GetData())); new Thread(delegate() { DoRollBack(combinedBet); }).Start(); return(new BE.BaseResponse <bool>(false, BE.ResponseStatus.Fail, response.Message)); } UserBetAccess uba = new UserBetAccess(); if (!uba.StoreUserBet(userBets)) { new Thread(delegate() { DoRollBack(combinedBet); }).Start(); return(new BE.BaseResponse <bool>(false, BE.ResponseStatus.Fail, "No se pudo guardar la puesta por un error interno")); } RequestContextHelper.SessionToken = response.GetData().SessionToken; RequestContextHelper.UserBalance = response.GetData().Balance; RequestContextHelper.UserName = response.GetData().NickName; user.SessionToken = response.GetData().SessionToken; user.Balance = response.GetData().Balance; UserAccess ua = new UserAccess(); user = ua.UpdateUser(user); return(new BE.BaseResponse <bool>(true, BE.ResponseStatus.OK)); } else { return(new BaseResponse <bool>(false, ResponseStatus.Fail, validatedBet.Message)); } }