public void AddQuestion(Question question, List <string> tagTexts)
        {
            using var context = new QADbContext(_connectionString);
            context.Questions.Add(question);
            context.SaveChanges();
            var tags = GetTags();

            foreach (string tagText in tagTexts)
            {
                var tag = tags.FirstOrDefault(t => t.Name == tagText);
                if (tag == null)
                {
                    tag = new Tag
                    {
                        Name = tagText
                    };
                    context.Tags.Add(tag);
                }
                context.QuestionsTags.Add(new QuestionsTags
                {
                    QuestionId = question.Id,
                    Question   = question,
                    Tag        = tag,
                    TagId      = tag.Id
                });
            }
            context.SaveChanges();
        }
 public void AddUser(User user, string password)
 {
     user.PasswordHash = BCrypt.Net.BCrypt.HashPassword(password);
     using var context = new QADbContext(_connectionString);
     context.Users.Add(user);
     context.SaveChanges();
 }
        public int GetLikes(int id)
        {
            using var context = new QADbContext(_connectionString);
            var question = GetQuestionForId(id);

            return(question.Likes.Count);
        }
        public void UpdateLikes(int id, User user)
        {
            using var context = new QADbContext(_connectionString);
            var like = new Likes
            {
                QuestionId = id,
                UserId     = user.Id
            };

            context.Likes.Add(like);
            context.SaveChanges();
        }
        public List <Question> GetQuestions()
        {
            using var context = new QADbContext(_connectionString);
            List <Question> questions = context.Questions.OrderByDescending(q => q.Date)
                                        .Include(q => q.Likes)
                                        .Include(q => q.Answers)
                                        .Include(q => q.QuestionsTags).ThenInclude(qt => qt.Tag)
                                        .ToList();

            foreach (Question question in questions)
            {
                question.User = GetById(question.Id);
            }
            return(questions);
        }
        public Question GetQuestionForId(int id)
        {
            using var context = new QADbContext(_connectionString);
            var question = context.Questions
                           .Include(q => q.Likes).ThenInclude(l => l.User)
                           .Include(q => q.Answers)
                           .Include(q => q.QuestionsTags).ThenInclude(qt => qt.Tag)
                           .FirstOrDefault(q => q.Id == id);

            question.User = GetById(question.UserId);
            foreach (Answer answer in question.Answers)
            {
                answer.User = GetById(answer.UserId);
            }
            return(question);
        }
 public void AddAnswer(Answer answer)
 {
     using var context = new QADbContext(_connectionString);
     context.Answers.Add(answer);
     context.SaveChanges();
 }
 public List <Tag> GetTags()
 {
     using var context = new QADbContext(_connectionString);
     return(context.Tags.ToList());
 }
 public User GetById(int id)
 {
     using var context = new QADbContext(_connectionString);
     return(context.Users.Include(u => u.Likes).FirstOrDefault(u => u.Id == id));
 }
 public User GetByEmail(string email)
 {
     using var context = new QADbContext(_connectionString);
     return(context.Users.FirstOrDefault(u => u.Email == email));
 }