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)); }
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)); } }
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)); }
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)); }
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); }
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)); }