PostController.php 2.2 KB

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