-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPostController.java
More file actions
69 lines (58 loc) · 3.05 KB
/
PostController.java
File metadata and controls
69 lines (58 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.example.be.web.controller;
import com.example.be.apiPayload.ApiResponse;
import com.example.be.apiPayload.code.status.ErrorStatus;
import com.example.be.apiPayload.exception.handler.UserHandler;
import com.example.be.domain.User;
import com.example.be.repository.UserRepository;
import com.example.be.service.JwtUtilServiceImpl;
import com.example.be.service.PostLikeServiceImpl;
import com.example.be.service.PostServiceImpl;
import com.example.be.service.UserServiceImpl;
import com.example.be.web.dto.CommonDTO;
import com.example.be.web.dto.PostDTO;
import com.example.be.web.dto.UserDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/post")
@RequiredArgsConstructor
public class PostController {
private final PostServiceImpl postService;
private final PostLikeServiceImpl postLikeService;
@PostMapping("/write")
@Operation(summary = "게시글 작성 API")
public ApiResponse<CommonDTO.IsSuccessDTO> write(@RequestBody PostDTO.postRequestDTO request, HttpServletRequest req) {
return ApiResponse.onSuccess(postService.write(request, req));
}
@GetMapping("/list")
@Operation(summary = "게시글 목록 조회 API (페이지네이션)", description = "4개씩 페이지네이션하여 게시글 목록을 조회합니다.")
public ApiResponse<PostDTO.PageResponseDTO> getPosts(
@Parameter(description = "페이지 번호 (0부터 시작)") @RequestParam(defaultValue = "0") int page) {
return ApiResponse.onSuccess(postService.getPosts(page, 4)); // 4개씩 페이지네이션
}
@GetMapping("/{postId}")
@Operation(summary = "게시글 상세 조회 API", description = "게시글 ID로 게시글 상세 정보와 댓글 목록을 조회합니다.")
public ApiResponse<PostDTO.PostDetailResponseDTO> getPostDetail(
@Parameter(description = "게시글 ID") @PathVariable Long postId,
HttpServletRequest request) {
return ApiResponse.onSuccess(postService.getPostDetail(postId, request));
}
@PostMapping("/{postId}/like")
@Operation(summary = "게시글 좋아요 토글 API", description = "게시글에 좋아요를 누르거나 취소합니다.")
public ApiResponse<PostDTO.PostLikeResponseDTO> togglePostLike(
@Parameter(description = "게시글 ID") @PathVariable Long postId,
HttpServletRequest request) {
return ApiResponse.onSuccess(postLikeService.togglePostLike(postId, request));
}
@PostMapping("/{postId}/delete")
@Operation(summary = "게시글 삭제 API", description = "게시글을 삭제합니다.")
public ApiResponse<CommonDTO.IsSuccessDTO> delete(
@Parameter(description = "게시글 ID") @PathVariable Long postId,
HttpServletRequest request) {
return ApiResponse.onSuccess(postService.deletePost(postId, request));
}
}