checkAnswer($id); $user = $this->getCurrentUser(); return $this->handleAnswer($answer, $user); } protected function handleAnswer(AnswerModel $answer, UserModel $user) { $question = $this->handleQuestionInfo($answer->question_id); $owner = $this->handleOwnerInfo($answer->owner_id); $me = $this->handleMeInfo($answer, $user); return [ 'id' => $answer->id, 'content' => $answer->content, 'anonymous' => $answer->anonymous, 'accepted' => $answer->accepted, 'published' => $answer->published, 'deleted' => $answer->deleted, 'comment_count' => $answer->comment_count, 'like_count' => $answer->like_count, 'create_time' => $answer->create_time, 'update_time' => $answer->update_time, 'question' => $question, 'owner' => $owner, 'me' => $me, ]; } protected function handleQuestionInfo($questionId) { $questionRepo = new QuestionRepo(); $question = $questionRepo->findById($questionId); return [ 'id' => $question->id, 'title' => $question->title, ]; } protected function handleOwnerInfo($userId) { $service = new ShallowUserInfo(); return $service->handle($userId); } protected function handleMeInfo(AnswerModel $answer, UserModel $user) { $me = [ 'logged' => 0, 'liked' => 0, 'owned' => 0, ]; if ($user->id > 0) { if ($user->id == $answer->owner_id) { $me['owned'] = 1; } $me['logged'] = 1; $likeRepo = new AnswerLikeRepo(); $like = $likeRepo->findAnswerLike($answer->id, $user->id); if ($like && $like->deleted == 0) { $me['liked'] = 1; } } return $me; } }