Ejemplo n.º 1
0
        private async Task HandleToteFinish(ToteFinishedMessage msg)
        {
            var tote = await _getTote.GetAsync(msg.ToteId);

            if (tote.State != ToteState.Started && tote.State != ToteState.Closed)
            {
                MessengerActor.Send(new MessageToChannel(msg.UserId,
                                                         "Чот не получается завершить тотализатор. А ты случаем не жулик?"));
                return;
            }

            await _finishTote.FinishAsync(tote.Id);

            var rewards = _rewardsLogic.CalcRewards(tote, msg.OptionId);

            foreach (var reward in rewards.ProportionalReward)
            {
                LedgerActor.Address.Tell(new ValidatedTransferMessage(tote.AccountId(), reward.Account.UserId, reward.Amount,
                                                                      tote.Currency,
                                                                      $"Поздравляем! Тотализатор \"{tote.Description}\" завершён, вот законный выигрыш!",
                                                                      false, $"(Тотализатор *{tote.Description}*)"));
            }

            LedgerActor.Address.Tell(new ValidatedTransferAllFundsMessage(tote.AccountId(), tote.Owner, tote.Currency,
                                                                          "Ваше вознаграждение за проведённый тотализатор!", $"(Тотализатор *{tote.Description}*)"));
            MessengerActor.Address.Tell(new UpdateToteReportsMessage(tote.Id));
            MessengerActor.Address.Tell(new ToteWinnersLoosersReportMessage(rewards, tote));
        }
Ejemplo n.º 2
0
        private async Task ReportWinnersLoosersInSlack(ToteWinnersLoosersReportMessage msg)
        {
            var reports = await _toteReports.GetAsync(msg.ToteId);

            var tote = await _getTote.GetAsync(msg.ToteId);

            var toteReport = LongMessagesToUser.ToteWinners(tote, msg);

            foreach (var cid in reports.Select(a => a.ChannelId).Distinct())
            {
                Self.Tell(new MessageToChannel(cid, toteReport));
            }
        }
Ejemplo n.º 3
0
        public async Task <Tote> AddAsync(string id, string optionId, string user, decimal amount)
        {
            var tote = await _get.GetAsync(id);

            var optionIdx = Array.IndexOf(tote.Options, tote.Options.FirstOrDefault(a => a.Id == optionId));

            await _ms.Totes.UpdateOneAsync(Builders <Tote> .Filter.Eq(a => a.Id, id),
                                           Builders <Tote> .Update.Push(a => a.Options[optionIdx].Bets, new ToteBet
            {
                Amount = amount,
                Id     = ObjectId.GenerateNewId().ToString(),
                User   = user
            }));

            return(await _get.GetAsync(id));
        }
Ejemplo n.º 4
0
        public async Task <Tote> RemoveAsync(Tote current, int number)
        {
            var option = current.Options.FirstOrDefault(a => a.Number == number);
            var byId   = Builders <Tote> .Filter.Eq(a => a.Id, current.Id);

            var removeFromOptions = Builders <Tote> .Update.Pull(a => a.Options, option);

            await _ms.Totes.UpdateOneAsync(byId, removeFromOptions);

            return(await _get.GetAsync(current.Id));
        }
Ejemplo n.º 5
0
        private async Task SetTote(PlaceBetStartMessage pars)
        {
            _user      = pars.UserId;
            _toteValue = await _getTote.GetAsync(pars.ToteId);

            var balance = await _balance.GetAsync(_cp.Period, _user, _toteValue.Currency, false);

            var balanceAmount = balance.Count > 0 ? balance[0].Amount : 0;
            await _slack.Dialog(pars.TriggerId, LongMessagesToUser.ToteDialog(_toteValue, balanceAmount));

            // await _response.ResponseWithBlocks(pars.ResponseUrl, LongMessagesToUser.ToteOptionsButtons(_toteValue, balanceAmount).ToList(), true);
        }
Ejemplo n.º 6
0
        public async Task <Tote> AddAsync(Tote current, string name)
        {
            var number = current.Options.Any() ? current.Options.Max(a => a.Number) : 0;

            await _ms.Totes.UpdateOneAsync(Builders <Tote> .Filter.Eq(a => a.Id, current.Id),

                                           Builders <Tote> .Update.Push(a => a.Options, new ToteOption
            {
                Bets   = Array.Empty <ToteBet>(),
                Id     = ObjectId.GenerateNewId().ToString(),
                Name   = name,
                Number = number + 1
            }));

            return(await _get.GetAsync(current.Id));
        }