public Strategy GetUserOverviewByMode(string userId, TradingMode mode)
 {
     return(_dbContext.Strategies
            .Include(o => o.Evaluations)
            .Include(o => o.Assets)
            .FirstOrDefault(o => o.UserId == userId && o.TradingMode == mode && o.IsOverview));
 }
 public IEnumerable <Strategy> GetUserStrategiesByMode(string userId, TradingMode mode)
 {
     return(_dbContext.Strategies
            .Include(o => o.Evaluations)
            .Include(o => o.Assets)
            .Include(o => o.Trades)
            .Where(o => o.UserId == userId && o.TradingMode == mode && !o.IsOverview));
 }
        public IActionResult GetStrategy(TradingMode mode, string strategyId)
        {
            var userId = HttpContext.User.GetUserId();

            if (userId == null)
            {
                return(BadRequest("User not found"));
            }

            var strategy = _strategyRepository.GetUserStrategiesByMode(userId, mode).FirstOrDefault(o => o.Id == strategyId);

            if (strategy == null)
            {
                return(BadRequest("Strategy not found"));
            }
            return(Ok(_mapper.Map <JsonStrategyModel>(strategy)));
        }
        public IActionResult GetStrategies(TradingMode mode, int page = 0, int perPage = 15, bool runningFirst = true)
        {
            var userId = HttpContext.User.GetUserId();

            if (userId == null)
            {
                return(BadRequest("User not found"));
            }

            var allStrategies = _strategyRepository.GetUserStrategiesByMode(userId, mode).OrderBy(o => o.StrategyState).ThenBy(o => o.Start);
            var strategies    = allStrategies.Skip(page * perPage).Take(perPage);

            return(Ok(new
            {
                strategies = strategies.Select(_mapper.Map <JsonStrategyModel>),
                page,
                perPage,
                count = allStrategies.Count()
            }));
        }
        public IActionResult GetOverview(TradingMode mode)
        {
            var userId = HttpContext.User.GetUserId();

            if (userId == null)
            {
                return(BadRequest("User not found"));
            }

            var strategies = _strategyRepository.GetUserStrategiesByMode(userId, mode);
            var overview   = _strategyRepository.GetUserOverviewByMode(userId, mode);

            //var assets = _assetRepository.GetByUserId(userId)
            //.Where(o => o.TradingMode == mode).Select(o => (currency: o.Currency, amount: o.Amount));

            //var currentValue = await _marketDataService.EvaluateAssetSet(assets, "binance");
            //var reserved = strategies.Aggregate(new EvaluationTick(), (res, val) =>
            //{
            //    var eval = val.Evaluations.Last();
            //    res.BtcValue += eval.BtcValue;
            //    res.UsdValue += eval.UsdValue;
            //    return res;
            //});

            return(Ok(new
            {
                allOpenededTradesCount = strategies.SelectMany(o => o.Trades).Count(o => !o.Closed.HasValue),
                allTradesCount = strategies.SelectMany(o => o.Trades).Count(),
                allNewTradesCount = strategies.Sum(o => o.GetNewTrades()),
                runningCount = strategies.Count(o => !o.Stop.HasValue),
                allCount = strategies.Count(),
                //currentValue = _mapper.Map<JsonEvaluationModel>(currentValue),
                yesterdayValue = _mapper.Map <JsonEvaluationModel>(overview.GetYesterdayValue()),
                overviewStrategyId = overview.Id,
                //reserved = _mapper.Map<JsonEvaluationModel>(reserved),
            }));
        }