//Метод добавляем пользователя в базу
        public static void RegisterUser(RegisterModel user)
        {
            //если данные валидны(логин и email не заняты)
            if ((RegisterValid(user) & RegisterValidError.AllErrors) == RegisterValidError.Nope)
            {
                using (DBContext db = new DBContext())
                {
                    //создаём запись о новом пользователе 
                    User newUser = new User();
                    newUser.Login = user.Login;
                    newUser.Email = user.Email;
                    newUser.Password = user.Password;

                    //и добавляем её в базу
                    db.Users.Add(newUser);
                    db.SaveChanges();
                    return;
                }
            }
            //а иначе ловите исключение
            else
            {
                throw new RegiserFailException(RegisterValid(user).ToString());
            }
            
        }
        //Метод проверяет, не заняты ты ли логин и email
        //должен вызываться перед RegisterUser, если вернётся что-то кроме Nope
        //то RegisterUser кинет исключение
        public static RegisterValidError RegisterValid(RegisterModel user)
        {
            //создаём перечисление для регистрации возможных ошибок
            RegisterValidError result = new RegisterValidError();

            //изначально инициируем его "ошибок нет"
            result = RegisterValidError.Nope;

            using (DBContext db = new DBContext())
            {
                //если в базе есть запись с таким логином
                bool LoginBusy = db.Users.Where(u => u.Login == user.Login).Any();
                if (LoginBusy)
                {
                    //то добавляем к возвращаему результату флаг логин занят
                    result = result | RegisterValidError.LoginBusy;
                }

                //если в базе есть запись с таким email
                bool EmailBusy = db.Users.Where(u => u.Email == user.Email).Any();
                if (EmailBusy)
                {
                    //то добавляем к возвращаему результату флаг email занят
                    result = result | RegisterValidError.EmailBusy;
                }
                
            }

            return result;
        }
        public ActionResult Register(RegisterModel model)
        {
            RegisterValidError error = AccountRepository.RegisterValid(model);

            //если логин занят, то добавляем ModelState соответствующее сообщение 
            if (error.HasFlag(RegisterValidError.LoginBusy))
            {
                ModelState.AddModelError("Login", "Пользователь с таким логином уже существует");
            }

            //если email занят, то добавляем ModelState соответствующее сообщение 
            if (error.HasFlag(RegisterValidError.EmailBusy))
            {
                ModelState.AddModelError("Email", "Пользователь с таким email уже существует");
            }

            //если никаких ошибок нет
            if (ModelState.IsValid)
            {
                //создаём новый аккаунт
                AccountRepository.RegisterUser(model);

                //на всякий случай проверяем, добавились ли данные
                if (AccountRepository.AuthorizationDataValid(model.Login, model.Password))
                {
                    //выдаём куки
                    FormsAuthentication.SetAuthCookie(model.Login, true);

                    //и перенаправляем на главную
                    return RedirectToAction("Index", "Home");
                }
            }
            
            //в любой непонятной ситуации опять показываем страницу авторизации 
            return View("Register");
        }