CommentController.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use Illuminate\Http\Request;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Traits\CommonTrait;
  6. use App\Services\UserService;
  7. use App\Services\CommentService;
  8. use App\Models\DTO\SearchData;
  9. use App\Models\DTO\ResponseData;
  10. use Exception;
  11. class CommentController extends Controller
  12. {
  13. use CommonTrait;
  14. private UserService $userService;
  15. private CommentService $commentService;
  16. public function __construct(
  17. UserService $userService, CommentService $commentService
  18. )
  19. {
  20. $this->middleware(['front', 'auth']);
  21. $this->userService = $userService;
  22. $this->commentService = $commentService;
  23. }
  24. /**
  25. * 작성 댓글
  26. * @method GET|POST
  27. * @see /account/comment
  28. */
  29. public function index(Request $request)
  30. {
  31. $params = SearchData::fromRequest($request);
  32. $params->path = route('account.comment');
  33. // 내가 작성한 게시글
  34. $comments = $this->commentService->userList(UID, $params);
  35. return view(layout('account.comment'), [
  36. 'comments' => $comments,
  37. 'params' => $params,
  38. 'menuID' => 'COMMENT'
  39. ]);
  40. }
  41. /**
  42. * 댓글 삭제
  43. * @method DELETE
  44. * @see /account/comment/delete
  45. */
  46. public function delete(Request $request, ResponseData $response): ResponseData
  47. {
  48. try {
  49. $posts = $request->validate([
  50. 'keys.*' => 'required|numeric|exists:tb_comment,id',
  51. ]);
  52. if($posts['keys']) {
  53. $user = $request->user();
  54. foreach($posts['keys'] as $key) {
  55. $comment = $this->commentService->commentModel->findOrNew($key);
  56. if(!$comment->exists) {
  57. continue;
  58. }
  59. if(!$comment->remove($comment, $user)) {
  60. throw new Exception($key . '번 댓글은 삭제할 수 없습니다.');
  61. }
  62. }
  63. }
  64. }catch(Exception $e) {
  65. $response = $response::fromException($e);
  66. }
  67. return $response;
  68. }
  69. }