Skip to content
Snippets Groups Projects
articleService.js 2.07 KiB
Newer Older
import Article from '../models/article.js';

const articleService = {
  async createArticle(articleData) {
    try {
      const article = new Article(articleData);
      await article.save();
      return article;
    } catch (err) {
      throw err;
    }
  },

  async findAllArticle() {
    try {
      const articles = await Article
      .find({})
      .populate('author')
      .populate('likes');
      return articles;
    } catch (err) {
      throw err;
    }
  },

  async findArticleById(articleId) {
    try {
Gwangbin's avatar
Gwangbin committed
      const article = await Article
      .findById(articleId)
      .populate('author')
      .populate('comments.author')
      .populate('likes');
      return article;
    } catch (err) {
      throw err;
    }
  },
Gwangbin's avatar
Gwangbin committed
  async findArticlesByAuthor(authorId) {
    try {
      const articles = await Article
      .find({ author: authorId })
      .populate('author')
      .populate('likes');
      return articles;
    } catch (err) {
      throw err;
    }
  },

  async deleteArticle(articleId) {
    try {
      const article = await Article.findByIdAndDelete(articleId);
      return article;
    } catch (err) {
      throw err;
    }
  },

  async createComment(articleId, commentData) {
    try {
      const article = await Article.findById(articleId);
      article.comments.push(commentData);
      await article.save();
      return article.populate('author');
Gwangbin's avatar
Gwangbin committed
    } catch (err) {
      throw err;
    }
  },

  async deleteComment(articleId, commentId) {
    try {
      const article = await Article.findById(articleId);
      article.comments.pull({ _id: commentId });
      await article.save();
      return article.populate('author');
Gwangbin's avatar
Gwangbin committed
    } catch (err) {
      throw err;
    }
  },

  async setLike(articleId, userId) {
    try {
      const article = await Article.findById(articleId);
      if(article.likes.includes(userId)) {
        article.likes.pull({ _id: userId });
      }
      else {
        article.likes.push(userId);
      }
      await article.save();
      return article;
    } catch (err) {
      throw err;
    }
};

export default articleService;