Ejemplo n.º 1
0
        /// <summary>
        /// Поменять текущее состояние в базе данных или содать это состояние.
        /// </summary>
        /// <param name="chatId"></param>
        /// <param name="hopType"></param>
        /// <param name="newStateName"></param>
        private static void ChangeCurrentChatState(long chatId, HopType hopType, string newStateName)
        {
            using (BotDbContext db = new BotDbContext(HelperDataBase.DB_OPTIONS))
            {
                //Возьмем значение состояния из базы
                ChatState chatState =
                    (from s in db.ChatState
                     where s.ChatId == chatId
                     select s).FirstOrDefault();

                string stateString = chatState?.State;

                //Если ячейка в базе пустая, то заполним её чем-нибудь и поменяем тип хопа чтобы потом переписать несусветицу.
                if (string.IsNullOrEmpty(stateString?.Trim(' ')))
                {
                    stateString = "___";
                    hopType     = HopType.RootLevelHope;
                }

                //Поменять состояние в базе данных.
                StateController stateCtrl = new StateController(stateString);

                //Будем изменять значение состояния в зависимости от типа перехода состояния.
                switch (hopType)
                {
                case HopType.NextLevelHope:
                    stateCtrl.AddStateAsNextState(newStateName);
                    break;

                case HopType.CurrentLevelHope:
                    stateCtrl.ChangeCurrentStateName(newStateName);
                    break;

                case HopType.RootLevelHope:
                    stateCtrl.SetRootState(newStateName);
                    break;
                }

                //получаем измененную строку состояния и сохраняем в базу
                string newStateString = stateCtrl.State;
                chatState.State = newStateString;
                db.SaveChanges();
            }
        }