public async Task <IActionResult> SaveBirthdayWall(BirthdayWallSchedulerViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View("BirthdayWall", model));
            }

            var groupInfo = _userHelperService.GetSelectedGroup(User);
            var idUser    = await _userHelperService.GetUserIdVk(User);

            Messages message = null;

            if (model.IdMessage.HasValue)
            {
                message = await _context.Messages
                          .Include(x => x.Files)
                          .FirstOrDefaultAsync(x => x.Id == model.IdMessage.Value);

                message.Text = model.Message;
                var newFilesInMessage = model.Files.Select(x => x.Id)
                                        .Except(message.Files.Select(x => x.IdFile))
                                        .Select(x => new FilesInMessage()
                {
                    IdFile    = x,
                    IdMessage = message.Id
                });

                await _context.FilesInMessage.AddRangeAsync(newFilesInMessage);
            }
            else
            {
                message = await DbHelper.AddMessage(_context, groupInfo.Key, model.Message, null, false, model.Files.Select(x => x.Id));
            }

            BirthdayWallScenarios scenario = _context.BirthdayWallScenarios.Include(x => x.Message).FirstOrDefault(x => x.IdGroup == groupInfo.Key);

            if (scenario == null)
            {
                scenario = new BirthdayWallScenarios()
                {
                    IdGroup   = groupInfo.Key,
                    IsEnabled = true
                };
                await _context.BirthdayWallScenarios.AddAsync(scenario);
            }
            if (!model.IdMessage.HasValue)
            {
                scenario.IdMessage = message.Id;
            }

            scenario.SendAt   = model.SendAt;
            scenario.IdVkUser = idUser;

            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Index)));
        }
        public async Task <IActionResult> ToogleBirthdayWallIsEnabled()
        {
            var groupInfo = _userHelperService.GetSelectedGroup(User);

            BirthdayWallScenarios birthdayWallScenario = await _context.BirthdayWallScenarios.FirstOrDefaultAsync(x => x.IdGroup == groupInfo.Key);

            if (birthdayWallScenario == null)
            {
                return(null);
            }
            birthdayWallScenario.IsEnabled = !birthdayWallScenario.IsEnabled;
            await _context.SaveChangesAsync();

            return(Json(new { birthdayWallScenario.IsEnabled }));
        }
        public async Task <IActionResult> BirthdayWall()
        {
            var groupInfo = _userHelperService.GetSelectedGroup(User);

            BirthdayWallScenarios scenario = await _context.BirthdayWallScenarios.FirstOrDefaultAsync(x => x.IdGroup == groupInfo.Key);

            BirthdayWallSchedulerViewModel model = null;

            if (scenario != null)
            {
                Messages message = await _context.Messages
                                   .Include(x => x.Files)
                                   .FirstOrDefaultAsync(x => x.Id == scenario.IdMessage);

                uint idx = 0;
                model = new BirthdayWallSchedulerViewModel()
                {
                    IdMessage = scenario.IdMessage,
                    SendAt    = scenario.SendAt,

                    Message = message.Text,
                    Files   = message.Files.Select(y => new FileModel()
                    {
                        Id    = y.IdFile,
                        Name  = _context.Files.FirstOrDefault(z => y.IdFile == z.Id)?.Name,
                        Index = idx++
                    }).ToList()
                };
            }
            else
            {
                model = new BirthdayWallSchedulerViewModel();
            }

            return(View(model));
        }