Ejemplo n.º 1
0
        private UIElement Add(string bookmakerPhoneNumber, IEnumerable <ClientDisplayModel> clients, IEnumerable <string> sports, IEnumerable <TournamentDisplayModel> tournaments, IEnumerable <EventDisplayModel> events, IEnumerable <CoefficientDisplayModel> coefficients)
        {
            BetCreateViewModel viewModel = new BetCreateViewModel(bookmakerPhoneNumber, clients, sports, tournaments, events, coefficients);
            BetCreateControl   control   = new BetCreateControl(viewModel);

            viewModel.BetCreated += (s, e) =>
            {
                BetCreateModel betCreateModel = e.Bet;
                BetCreateDTO   betCreateDTO   = Mapper.Map <BetCreateModel, BetCreateDTO>(betCreateModel);

                using (IBetService service = factory.CreateBetService())
                {
                    ServiceMessage serviceMessage = service.Create(betCreateDTO);
                    RaiseReceivedMessageEvent(serviceMessage);

                    if (serviceMessage.IsSuccessful)
                    {
                        viewModel.Sum = 0;
                        Notify();
                    }
                }
            };

            return(control);
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <WebApiResponse> > CreateBet(long roundId, BetCreateDTO betCreateDTO)
        {
            UserAccount userAccount = await GetUserAccountOrAbortIfAuthUserIsNotAccountOwner(betCreateDTO.AccountId);

            await AbortIfAccountHasInsufficientFundsOrInputAmountIsZero(userAccount, betCreateDTO.Amount);

            Round round = await GetRoundOrAbortIfRoundStatusClosed(roundId);

            RouletteRule rouletteRule = await GetRouletteRuleOrAbortIfNotFound(betCreateDTO, round);

            await AppDbContext.BeginTransactionAsync();

            AccountTransaction accountTransaction = await GetAndSaveAccountTransaction(userAccount, betCreateDTO.Amount);

            Bet bet = new Bet
            {
                AccountTransaction = accountTransaction,
                RouletteRule       = rouletteRule,
                PaymentRatio       = rouletteRule.Pay,
                Round        = round,
                UserRegister = accountTransaction.UserRegister,
                State        = await AppDbContext.FindGenericElementByIdAsync <BetState>((long)BetStates.Active)
            };

            await CreateFromEntityAsync(bet);

            await SaveBetNumbersList(bet, betCreateDTO.Numbers);

            await AppDbContext.CommitTransactionAsync();

            return(MapEntityAndMakeResponse(bet));
        }
Ejemplo n.º 3
0
        public async Task <ActionResult> Bet([FromBody] BetCreateDTO betCreateDTO)
        {
            var rouletteEntiti = context.Roulettes.FirstOrDefault(x => x.Id == betCreateDTO.RouletteId);

            if (rouletteEntiti == null)
            {
                return(NotFound());
            }
            if (!rouletteEntiti.IsOpen)
            {
                return(BadRequest($"The roulette {betCreateDTO.RouletteId} is closed"));
            }
            if (!rouletteEntiti.IsEnable)
            {
                return(BadRequest($"The roulette {betCreateDTO.RouletteId} is disabled"));
            }
            if (string.IsNullOrEmpty(betCreateDTO.Number.ToString()) && string.IsNullOrEmpty(betCreateDTO.Color))
            {
                return(BadRequest("Invalid bet, Color or Number is missing"));
            }
            var entiti = mapper.Map <Bet>(betCreateDTO);

            context.Add(entiti);
            await context.SaveChangesAsync();

            return(Ok(betCreateDTO));
        }
Ejemplo n.º 4
0
        private async Task <RouletteRule> GetRouletteRuleOrAbortIfNotFound(BetCreateDTO betCreateDTO, Round round)
        {
            RouletteRule rouletteRule = await AppDbContext.Set <RouletteRule>()
                                        .Include(x => x.Roulette.Type)
                                        .Include(x => x.Roulette.State)
                                        .FirstOrDefaultAsync(
                x => x.Id == betCreateDTO.RouletteRuleId &&
                x.Roulette.Id == round.Roulette.Id &&
                x.DeletedAt == null);

            if (rouletteRule == null)
            {
                throw new WebApiException(System.Net.HttpStatusCode.Forbidden, "the rule not found!");
            }

            return(rouletteRule);
        }
Ejemplo n.º 5
0
        private bool Validate(BetCreateDTO betCreateDTO, ref string message)
        {
            bool isValid = true;

            if (String.IsNullOrEmpty(betCreateDTO.BookmakerPhoneNumber))
            {
                message = "Bookmaker's phone number is required";
                isValid = false;
            }
            else if (betCreateDTO.Sum <= 0)
            {
                message = "Invalid sum: must be more then 0";
                isValid = false;
            }

            return(isValid);
        }
Ejemplo n.º 6
0
        public ServiceMessage Create(BetCreateDTO betCreateDTO)
        {
            string message = "";
            bool   success = true;

            string   sportName      = betCreateDTO.SportName;
            string   tournamentName = betCreateDTO.TournamentName;
            DateTime dateOfEvent    = betCreateDTO.DateOfEvent;
            List <ParticipantBaseDTO> participants = betCreateDTO.EventParticipants;
            string  coefficientDescription         = betCreateDTO.CoefficientDescription;
            decimal sum = betCreateDTO.Sum;
            string  clientPhoneNumber    = betCreateDTO.ClientPhoneNumber;
            string  bookmakerPhoneNumber = betCreateDTO.BookmakerPhoneNumber;

            if (success = ValidateBase(betCreateDTO, ref message) && Validate(betCreateDTO, ref message))
            {
                try
                {
                    IEnumerable <ParticipantEntity> participantEntities = participants
                                                                          .Select(p => unitOfWork.Participants.Get(p.Name, p.SportName, p.CountryName));

                    EventEntity eventEntity = unitOfWork
                                              .Events
                                              .Get(sportName, tournamentName, dateOfEvent, participantEntities);

                    CoefficientEntity coefficientEntity = unitOfWork
                                                          .Coefficients
                                                          .Get(eventEntity.Id, coefficientDescription);

                    if (coefficientEntity != null)
                    {
                        bool exists = unitOfWork.Bets.Exists(coefficientEntity.Id, clientPhoneNumber);
                        if (!exists)
                        {
                            ClientEntity clientEntity = unitOfWork
                                                        .Clients
                                                        .Get(clientPhoneNumber);

                            BookmakerEntity bookmakerEntity = unitOfWork
                                                              .Bookmakers
                                                              .Get(bookmakerPhoneNumber);

                            BetEntity betEntity = new BetEntity
                            {
                                ClientId         = clientEntity.Id,
                                BookmakerId      = bookmakerEntity.Id,
                                CoefficientId    = coefficientEntity.Id,
                                RegistrationDate = DateTime.Now,
                                Sum = sum
                            };

                            unitOfWork.Bets.Add(betEntity);
                            unitOfWork.Commit();

                            message = "Created new bet";
                        }
                        else
                        {
                            message = "Such bet already exists";
                            success = false;
                        }
                    }
                    else
                    {
                        message = "Such coefficient was not found";
                        success = false;
                    }
                }
                catch (Exception ex)
                {
                    message = ExceptionMessageBuilder.BuildMessage(ex);
                    success = false;
                }
            }

            return(new ServiceMessage(message, success));
        }
Ejemplo n.º 7
0
 public ServiceMessage Create(BetCreateDTO betCreateDTO)
 {
     return(new ServiceMessage("No permissions", false));
 }
Ejemplo n.º 8
0
 public async Task <ActionResult <WebApiResponse> > CreateBet(long roundId, [FromBody] BetCreateDTO betCreateDTO)
 {
     return(await((IBetComponent)_betContextCrud).CreateBet(roundId, betCreateDTO));
 }