public async Task ExecuteAsync()
        {
            var startDate  = DateTime.Now.Date.AddMonths(-1);
            var endDate    = DateTime.Now.Date.AddDays(1);
            var operations = await _dbLogicManager.GetOperationsByPeriod(startDate, endDate);

            var allAvailableCategories = operations.SelectMany(op => op.Categories).ToHashSet();

            foreach (var cat in allAvailableCategories)
            {
                Console.Write(cat + " ");
            }
            Console.WriteLine();
            var categoriesChosenByUser = ConsoleExtensions.ReadStringListOrRetry().Select(c => c.Trim().ToUpper());

            var categorySums = new Dictionary <string, decimal>();

            foreach (var cat in categoriesChosenByUser)
            {
                var sum = operations.Where(op => op.Categories != null && op.Categories.Contains(cat)).Sum(c => c.Amount);
                categorySums[cat] = sum;
            }

            foreach (var kv in categorySums.OrderBy(kv => kv.Value))
            {
                Console.WriteLine($"{kv.Key}: {kv.Value}");
            }

            var chosenCategoriesSum = operations.Where(op => op.Categories != null && op.Categories.Any(c => categoriesChosenByUser.Contains(c))).Sum(op => op.Amount);

            Console.WriteLine($"Всего для выбранных категорий:{chosenCategoriesSum}");
        }
        public async Task ExecuteAsync(List <CardOperation> operationsToAdd)
        {
            Console.WriteLine("Введите категории через запятую:");

            var categoryNames = ConsoleExtensions.ReadStringListOrRetry();
            await _dbLogicManager.AddOperationCategories(operationsToAdd, categoryNames);
        }
        public async Task ExecuteAsync()
        {
            RenderMenu();
            var userCategoriesInput = ConsoleExtensions.ReadStringListOrRetry();
            var operations          = await GetCardOperationsByUserCategoriesInput(userCategoriesInput);

            RenderOperationsAndTotal(operations);
        }
        private async Task <List <CardOperation> > GetByCategory()
        {
            Console.WriteLine("Перечислите имена категорий через запятую");

            var userCategoriesInput = ConsoleExtensions.ReadStringListOrRetry();

            List <CardOperation> operations = null;

            if (userCategoriesInput.Count != 0)
            {
                operations = await _dbLogicManager.GetOperationsByCategories(userCategoriesInput);
            }
            else
            {
                operations = await _dbLogicManager.GetOperationsWithNoCategories();
            }

            return(operations);
        }