Skip to content

Commit 192fcb4

Browse files
committed
feat[post]:페이징추가
1 parent 3c6185f commit 192fcb4

File tree

5 files changed

+58
-12
lines changed

5 files changed

+58
-12
lines changed

backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,12 @@
22

33
import com.ai.lawyer.domain.post.dto.*;
44
import com.ai.lawyer.domain.post.service.PostService;
5-
import com.ai.lawyer.domain.member.entity.Member;
65
import com.ai.lawyer.domain.member.repositories.MemberRepository;
76
import com.ai.lawyer.global.jwt.TokenProvider;
87
import com.ai.lawyer.global.response.ApiResponse;
98
import io.swagger.v3.oas.annotations.Operation;
109
import io.swagger.v3.oas.annotations.tags.Tag;
11-
import jakarta.servlet.http.HttpServletRequest;
12-
import lombok.AllArgsConstructor;
13-
import lombok.Data;
1410
import lombok.RequiredArgsConstructor;
15-
import org.springframework.beans.factory.annotation.Autowired;
1611
import org.springframework.http.ResponseEntity;
1712
import org.springframework.web.bind.annotation.*;
1813
import org.springframework.web.server.ResponseStatusException;
@@ -66,7 +61,7 @@ public ResponseEntity<ApiResponse<List<PostDetailDto>>> getAllPosts() {
6661
}
6762

6863
@Operation(summary = "게시글 간편 전체 조회")
69-
@GetMapping("/simple")
64+
@GetMapping("/simplePost")
7065
public ResponseEntity<ApiResponse<List<PostSimpleDto>>> getAllSimplePosts() {
7166
List<PostSimpleDto> posts = postService.getAllSimplePosts();
7267
return ResponseEntity.ok(new ApiResponse<>(200, "게시글 간편 전체 조회 성공", posts));
@@ -153,7 +148,7 @@ public ResponseEntity<ApiResponse<List<PostDto>>> getMyPosts() {
153148
}
154149

155150
@Operation(summary = "게시글+투표 동시 등록")
156-
@PostMapping("/with-poll")
151+
@PostMapping("/createpost")
157152
public ResponseEntity<ApiResponse<PostDetailDto>> createPostWithPoll(@RequestBody PostWithPollCreateDto dto) {
158153
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
159154
Object principal = authentication.getPrincipal();
@@ -171,7 +166,7 @@ public ResponseEntity<ApiResponse<PostDetailDto>> createPostWithPoll(@RequestBod
171166

172167
@Operation(summary = "게시글 페이징 조회")
173168
@GetMapping("/paged")
174-
public ResponseEntity<ApiResponse<PostPageDTO>> getPostsPaged(
169+
public ResponseEntity<ApiResponse<PostPageDto>> getPostsPaged(
175170
@RequestParam(defaultValue = "0") int page,
176171
@RequestParam(defaultValue = "10") int size
177172
) {
@@ -180,7 +175,37 @@ public ResponseEntity<ApiResponse<PostPageDTO>> getPostsPaged(
180175
if (posts == null) {
181176
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
182177
}
183-
PostPageDTO response = new PostPageDTO(posts);
178+
PostPageDto response = new PostPageDto(posts);
184179
return ResponseEntity.ok(new ApiResponse<>(200, "페이징 게시글 조회 성공", response));
185180
}
181+
182+
@Operation(summary = "진행중 투표 게시글 페이징 조회")
183+
@GetMapping("/ongoingPaged")
184+
public ResponseEntity<ApiResponse<PostPageDto>> getOngoingPostsPaged(
185+
@RequestParam(defaultValue = "0") int page,
186+
@RequestParam(defaultValue = "10") int size
187+
) {
188+
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
189+
Page<PostDto> posts = postService.getOngoingPostsPaged(pageable);
190+
if (posts == null) {
191+
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
192+
}
193+
PostPageDto response = new PostPageDto(posts);
194+
return ResponseEntity.ok(new ApiResponse<>(200, "진행중 투표 게시글 페이징 조회 성공", response));
195+
}
196+
197+
@Operation(summary = "마감 투표 게시글 페이징 조회")
198+
@GetMapping("/closedPaged")
199+
public ResponseEntity<ApiResponse<PostPageDto>> getClosedPostsPaged(
200+
@RequestParam(defaultValue = "0") int page,
201+
@RequestParam(defaultValue = "10") int size
202+
) {
203+
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
204+
Page<PostDto> posts = postService.getClosedPostsPaged(pageable);
205+
if (posts == null) {
206+
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
207+
}
208+
PostPageDto response = new PostPageDto(posts);
209+
return ResponseEntity.ok(new ApiResponse<>(200, "마감된 투표 게시글 페이징 조회 성공", response));
210+
}
186211
}

backend/src/main/java/com/ai/lawyer/domain/post/dto/PostPageDTO.java renamed to backend/src/main/java/com/ai/lawyer/domain/post/dto/PostPageDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
@Getter
1111
@Setter
1212
@NoArgsConstructor
13-
public class PostPageDTO {
13+
public class PostPageDto {
1414
private List<PostDto> content;
1515
private int page;
1616
private int size;
1717
private int totalPages;
1818
private long totalElements;
1919

20-
public PostPageDTO(Page<PostDto> page) {
20+
public PostPageDto(Page<PostDto> page) {
2121
this.content = page.getContent();
2222
this.page = page.getNumber();
2323
this.size = page.getSize();

backend/src/main/java/com/ai/lawyer/domain/post/entity/Post.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class Post {
2222
private Long postId;
2323

2424
@ManyToOne(fetch = FetchType.LAZY)
25-
@JoinColumn(name = "member_id", nullable = false, foreignKey = @ForeignKey(name = "FK_POST_MEMBER"))
25+
@JoinColumn(name = "member_id", nullable = true, foreignKey = @ForeignKey(name = "FK_POST_MEMBER"))
2626
private Member member;
2727

2828
@Column(name = "post_name", length = 100, nullable = false)

backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ public interface PostService {
3333

3434
// ===== 페이징 관련 =====
3535
Page<PostDto> getPostsPaged(Pageable pageable);
36+
Page<PostDto> getOngoingPostsPaged(Pageable pageable);
37+
Page<PostDto> getClosedPostsPaged(Pageable pageable);
3638
}

backend/src/main/java/com/ai/lawyer/domain/post/service/PostServiceImpl.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.ai.lawyer.domain.poll.service.PollService;
2222
import org.springframework.data.domain.Page;
2323
import org.springframework.data.domain.Pageable;
24+
import org.springframework.data.domain.PageImpl;
2425
import org.springframework.http.HttpStatus;
2526
import org.springframework.stereotype.Service;
2627
import org.springframework.transaction.annotation.Transactional;
@@ -254,6 +255,24 @@ public Page<PostDto> getPostsPaged(Pageable pageable) {
254255
return postRepository.findAll(pageable).map(this::convertToDto);
255256
}
256257

258+
@Override
259+
public Page<PostDto> getOngoingPostsPaged(Pageable pageable) {
260+
Page<PostDto> allPosts = postRepository.findAll(pageable).map(this::convertToDto);
261+
List<PostDto> ongoing = allPosts.stream()
262+
.filter(dto -> dto.getPoll() != null && dto.getPoll().getStatus() == PollDto.PollStatus.ONGOING)
263+
.collect(Collectors.toList());
264+
return new PageImpl<>(ongoing, pageable, ongoing.size());
265+
}
266+
267+
@Override
268+
public Page<PostDto> getClosedPostsPaged(Pageable pageable) {
269+
Page<PostDto> allPosts = postRepository.findAll(pageable).map(this::convertToDto);
270+
List<PostDto> closed = allPosts.stream()
271+
.filter(dto -> dto.getPoll() != null && dto.getPoll().getStatus() == PollDto.PollStatus.CLOSED)
272+
.collect(Collectors.toList());
273+
return new PageImpl<>(closed, pageable, closed.size());
274+
}
275+
257276
private PostDto convertToDto(Post entity) {
258277
Long memberId = null;
259278
if (entity.getMember() != null) {

0 commit comments

Comments
 (0)