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); }
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)); }
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)); }
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); }
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); }
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)); }
public ServiceMessage Create(BetCreateDTO betCreateDTO) { return(new ServiceMessage("No permissions", false)); }
public async Task <ActionResult <WebApiResponse> > CreateBet(long roundId, [FromBody] BetCreateDTO betCreateDTO) { return(await((IBetComponent)_betContextCrud).CreateBet(roundId, betCreateDTO)); }