//Метод добавляем пользователя в базу
        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;
        }
 //Метод проверяет логин и пароль, 
 //возвращает true, если в базе есть запись с соответсвующими значениями 
 public static bool AuthorizationDataValid(string login, string password)
 {
     using (DBContext db = new DBContext())
     {
         bool userExist = db.Users.Where(u => u.Login == login && u.Password == password).Any();
         return userExist?true:false;
     }
 }
 //Метод достаёт пост из базы по id
 public static PostView getPost(int id)
 {
     Post post;
     using (DBContext db = new DBContext())
     {
         post = db.Posts.FirstOrDefault(p => p.Id_post == id);
         return postToPostView(post);
     }           
 }
 //Метод достаёт изображение из базы по id
 public static Image getImage(int id)
 {
     Image image;
     using (DBContext db = new DBContext())
     {
         image = db.Images.FirstOrDefault(img => img.Id_image == id);
     }
     return image;        
 }
Example #6
0
 // GET: Post
 public ActionResult Index(int id)
 {
     
     using (DBContext db = new DBContext())
     {
         try
         {
             //пробуем получаем пост по id
             PostView postView = ContentRepository.getPost(id);
             return View(postView);
         }
         //если не получилось, то возвращаем страницу 404
         catch
         {
             return View("Error404");
         }    
     }
 }
Example #7
0
        // GET: Image
        public ActionResult GetImage(int id)
        {

            Image image = new Image();
            //запрашиваем изображение из базы
            using(DBContext db = new DBContext())
            {
                image = ContentRepository.getImage(id);
            }
            //если такое есть, то возвращаем изображение
            if (image != null)
            {
                return File(image.ImageData, image.ImageMimeType);
            }
            //на нет и суда нет
            else
            {
                return Content("Изображение отсутствует");
            }
        }
        //удаление поста и связанных с ним данных
        public static void removePost(int postId, string username)
        {
            
            using (var db = new DBContext())
            {
                //ищим пост предназначенный для удаления
                //за одно проверяем, принадлежит ли он данному юзеру
                Post post = db.Posts.FirstOrDefault(p => p.Id_post == postId && p.User.Login == username);
                //если пост есть и у юзера есть права на его удаление
                if (post != null)
                {
                    //ищем и удаляем изображение из поста
                    Image image = post.Image;
                    if (image != null) db.Images.Remove(image);

                    //ищем и удаляем теги, которые больше не используются
                    //это такие теги, с которыми связан только 1 пост
                    var unuseTags = post.Tags.Where(p => p.Posts.Count == 1);
                    db.Tags.RemoveRange(unuseTags);

                    //удаляем сам пост и сохраняем изменения
                    db.Posts.Remove(post);
                    db.SaveChanges();
                }
                else
                {
                    throw new PostNotExistOrNotAccessException();
                }
            }
        }
        //Метод ассоциирует пост с тегами
        private static void relatedTagsAndPost(int postId, ICollection<Tag> tagList)
        {

            using (var db = new DBContext())
            {
                //берём из базы пост с указанным id
                Post post = db.Posts.FirstOrDefault(p => p.Id_post == postId);

                //ищем в базе наши теги и оссоциируем с ними данный пост
                foreach (var element in tagList)
                {
                    Tag tag = db.Tags.FirstOrDefault(t => t.name == element.name);
                    post.Tags.Add(tag);
                }

                //сохраняем изменения
                db.SaveChanges();
            }
        }
Example #10
0
        //Метод добавляет теги в базу 
        private static ICollection<Tag> addTags(string tagsString)
        {
            using (var db = new DBContext())
            {

                //разбиваем строку тегов на список строк по ','
                //откидываем лишние пробелы по краям тегов
                IEnumerable<string> listTagString = tagsString.Split(',').Select(s => s.Trim());

                //создаём список тегов из listTagString
                //каждая строка это имя тега
                ICollection<Tag> tags = listTagString.Select(tag => new Tag()
                {
                    name = tag
                }).ToList();

                //добавляем теги в базу
                //если тег там уже есть, то не пытаемся добавить его снова
                foreach (Tag tag in tags)
                {
                    if (!db.Tags.Any(t => t.name == tag.name))
                    {
                        db.Tags.Add(tag);
                    }
                }

                //сохраняем изменения
                db.SaveChanges();
                return tags;
            }
        }
Example #11
0
        //добавляем новый пост в базу
        //postModel - текстовые данные введённый пользователем
        //image - изображение в том виде, в каком мы получили его от браузера
        //username - имя пользователя, которому принадлежит пост
        public static void addPost(CreatePostModel postModel, HttpPostedFileBase image, string username)
        {
            using (DBContext db = new DBContext())
            {
                Post post = new Post();

                //добавление к записи заголовка и текста
                post.Header = postModel.Header;
                post.Text = postModel.Text;

                //добавляем изображение
                if (image != null)
                {
                    post.Image = new Image
                    {
                        ImageMimeType = image.ContentType,
                        ImageData = new byte[image.ContentLength]
                    };
                    //записываем битарей изображения
                    image.InputStream.Read(post.Image.ImageData, 0, image.ContentLength);
                }

                //добавляем пользователя, автора поста
                post.User = db.Users.FirstOrDefault(u => u.Login == username);
                Debug.Assert(post.User != null, "пользователь не существует");
                
                //сохранение в базе
                db.Posts.Add(post);
                db.SaveChanges();

                //добавляем теги в базу
                var tags = addTags(postModel.Tags);
                
                //ассоциируем с ними пост
                relatedTagsAndPost(post.Id_post, tags);
            }
        }