public async Task <IActionResult> InsertAsync()
        {
            var accountId            = "1";
            var account              = _factory.GetClaptrap <IAccount>(accountId);
            var accountBalanceMinion = _factory.GetClaptrap <IAccountBalanceMinion>(accountId);
            var oldBalance           = await account.GetBalanceAsync();

            var oldMinionBalance = await accountBalanceMinion.GetBalance();

            var newBalance = await account.TransferInAsync(1);

            await Task.Delay(TimeSpan.FromSeconds(1));

            var newMinionBalance = await accountBalanceMinion.GetBalance();

            var re = new Dictionary <string, object>
            {
                { nameof(oldBalance), oldBalance },
                { nameof(oldMinionBalance), oldMinionBalance },
                { nameof(newBalance), newBalance },
                { nameof(newMinionBalance), newMinionBalance },
            };

            return(Ok(re));
        }
        public async Task <BlazorJsonResponse> TakeSeatAsync([FromBody] TakeSeatInput input)
        {
            var seatId = input.SeatId;

            if (string.IsNullOrEmpty(input.SeatId))
            {
                var random     = new Random();
                var seatNumber = random.Next(0, 10000);
                seatId = $"{input.TrainId}{seatNumber:0000}";
            }

            var cartActor = _actorProxyFactory.GetClaptrap <ISeatActor>(seatId);
            var requestId = Guid.NewGuid().ToString("N");

            try
            {
                await cartActor.TakeSeatAsync(input.FromStationId, input.ToStationId, requestId);
            }
            catch (Exception e)
            {
                return(new BlazorJsonResponse {
                    Status = "0", Message = e.Message
                });
            }

            var fromName = await _stationRepository.GetNameAsync(input.FromStationId);

            var toName = await _stationRepository.GetNameAsync(input.ToStationId);

            return(new BlazorJsonResponse
            {
                Status = "1",
                Message = $"take a seat success {seatId} [{fromName} -> {toName}] with requestId : {requestId}"
            });
        }
        public async Task <IActionResult> GetStatus(int itemId = 1)
        {
            var auctionItemActor = _actorProxyFactory.GetClaptrap <IAuctionItemActor>(itemId.ToString());
            var status           = await auctionItemActor.GetStatusAsync();

            var result = new
            {
                status
            };

            return(Ok(result));
        }
        public async Task <IEnumerable <LeftCountItem> > GetLeftSeatAsync(int trainId)
        {
            var trainGran = _actorProxyFactory.GetClaptrap <ITrainGran>(trainId.ToString());
            var allCount  = await trainGran.GetAllCountAsync();

            var stationIds = allCount.Keys
                             .Concat(allCount.SelectMany(x => x.Value.Keys))
                             .Distinct();
            var nameDic = await _stationRepository.GetNamesAsync(stationIds);

            var re = allCount.SelectMany(x =>
            {
                var(key, value) = x;
                return(value.Select(inner => new LeftCountItem
                {
                    LeftCount = inner.Value,
                    FromStationId = key,
                    FromStationName = nameDic[key],
                    ToStationId = inner.Key,
                    ToStationName = nameDic[inner.Key]
                }));
            })
                     .ToList();

            return(re);
        }
Exemple #5
0
 public override async ValueTask HandleEvent(NoneStateData stateData,
                                             TakeSeatEvent eventData,
                                             IEventContext eventContext)
 {
     var claptrapIdentity = eventContext.State.Identity;
     var seatId           = SeatId.FromSeatId(claptrapIdentity.Id);
     var trainActor       = _actorProxyFactory.GetClaptrap <ITrainGran>(seatId.TrainId.ToString());
     await trainActor.UpdateCountAsync(eventData.FromStationId, eventData.ToStationId);
 }