checkArticle($id); $user = $this->getLoginUser(); $validator = new UserLimitValidator(); $validator->checkDailyArticleLikeLimit($user); $likeRepo = new ArticleLikeRepo(); $articleLike = $likeRepo->findArticleLike($article->id, $user->id); if (!$articleLike) { $articleLike = new ArticleLikeModel(); $articleLike->article_id = $article->id; $articleLike->user_id = $user->id; $articleLike->create(); $this->incrArticleLikeCount($article); } else { $articleLike->delete(); $this->decrArticleLikeCount($article); } $this->incrUserDailyArticleLikeCount($user); return $article->like_count; } protected function incrArticleLikeCount(ArticleModel $article) { $article->like_count += 1; $article->update(); } protected function decrArticleLikeCount(ArticleModel $article) { if ($article->like_count > 0) { $article->like_count -= 1; $article->update(); } } protected function incrUserDailyArticleLikeCount(UserModel $user) { $this->eventsManager->fire('UserDailyCounter:incrArticleLikeCount', $this, $user); } }