Exemplo n.º 1
0
        public async Task <IActionResult> BuyPlotTranferAsync([FromRoute] int deadlineHours = 12)
        {
            long minerId = long.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier));
            var  miner   = await DbContext.Miners
                           .Include(x => x.Owner)
                           .FirstOrDefaultAsync(x => x.Id == minerId);

            var customer = miner.Owner;

            if (customer.PlotMinutes < 0)
            {
                return(Conflict());
            }

            long?plotterId = PlotterService.GetSuitablePlotterId();

            if (plotterId == null)
            {
                return(NotFound());
            }

            var plotter = await DbContext.Plotters
                          .Include(x => x.Owner)
                          .FirstOrDefaultAsync(x => x.Id == plotterId);

            var seller = plotter.Owner;

            var plotTransfer = await PlotterService.TryRequestPlotTransferAsync(miner.Id, plotter.Id, deadlineHours);

            plotter.Earnings     += plotTransfer.Cost;
            seller.PlotMinutes   += plotTransfer.Cost;
            customer.PlotMinutes -= plotTransfer.Cost;

            DbContext.PlotTranfers.Add(plotTransfer);
            await DbContext.SaveChangesConcurrentAsync();

            return(Ok(plotTransfer));
        }