Skip to content

Commit 4fba4ae

Browse files
committed
✨Feat: 게시글 목록 조회 기능 구현
1 parent cd6f533 commit 4fba4ae

4 files changed

Lines changed: 31 additions & 1 deletion

File tree

src/main/java/com/be/sportizebe/domain/post/controller/PostController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
import io.swagger.v3.oas.annotations.tags.Tag;
1313
import jakarta.validation.Valid;
1414
import lombok.RequiredArgsConstructor;
15+
import org.springframework.data.domain.Page;
16+
import org.springframework.data.domain.Pageable;
17+
import org.springframework.data.domain.Sort;
18+
import org.springframework.data.web.PageableDefault;
1519
import org.springframework.http.HttpStatus;
1620
import org.springframework.http.ResponseEntity;
1721
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -54,4 +58,13 @@ public ResponseEntity<BaseResponse<Void>> deletePost(
5458
postService.deletePost(postId, user);
5559
return ResponseEntity.ok(BaseResponse.success("게시글 삭제 성공", null));
5660
}
61+
62+
@GetMapping("/posts/{property}")
63+
@Operation(summary = "게시글 목록 조회", description = "게시판 종류별 게시글 목록을 페이징하여 조회합니다.")
64+
public ResponseEntity<BaseResponse<Page<PostResponse>>> getPosts(
65+
@Parameter(description = "게시판 종류 (SOCCER, BASKETBALL, FREE)") @PathVariable PostProperty property,
66+
@Parameter(hidden = true) @PageableDefault(size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {
67+
Page<PostResponse> response = postService.getPosts(property, pageable);
68+
return ResponseEntity.ok(BaseResponse.success("게시글 목록 조회 성공", response));
69+
}
5770
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package com.be.sportizebe.domain.post.repository;
22

33
import com.be.sportizebe.domain.post.entity.Post;
4+
import com.be.sportizebe.domain.post.entity.PostProperty;
5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.Pageable;
47
import org.springframework.data.jpa.repository.JpaRepository;
58

6-
public interface PostRepository extends JpaRepository<Post, Long> {}
9+
public interface PostRepository extends JpaRepository<Post, Long> {
10+
Page<Post> findByProperty(PostProperty property, Pageable pageable);
11+
}

src/main/java/com/be/sportizebe/domain/post/service/PostService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
import com.be.sportizebe.domain.post.dto.response.PostResponse;
66
import com.be.sportizebe.domain.post.entity.PostProperty;
77
import com.be.sportizebe.domain.user.entity.User;
8+
import org.springframework.data.domain.Page;
9+
import org.springframework.data.domain.Pageable;
810

911
public interface PostService {
1012
PostResponse createPost(PostProperty property, CreatePostRequest request, User user); // 게시글 생성
1113

1214
PostResponse updatePost(Long postId, UpdatePostRequest request, User user); // 게시글 수정
1315

1416
void deletePost(Long postId, User user); // 게시글 삭제
17+
18+
Page<PostResponse> getPosts(PostProperty property, Pageable pageable); // 게시글 목록 조회
1519
}

src/main/java/com/be/sportizebe/domain/post/service/PostServiceImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import jakarta.transaction.Transactional;
1313
import lombok.RequiredArgsConstructor;
1414
import lombok.extern.slf4j.Slf4j;
15+
import org.springframework.data.domain.Page;
16+
import org.springframework.data.domain.Pageable;
1517
import org.springframework.stereotype.Service;
1618

1719
@Slf4j
@@ -60,4 +62,10 @@ public void deletePost(Long postId, User user) {
6062

6163
postRepository.delete(post);
6264
}
65+
66+
@Override
67+
public Page<PostResponse> getPosts(PostProperty property, Pageable pageable) {
68+
return postRepository.findByProperty(property, pageable)
69+
.map(PostResponse::from);
70+
}
6371
}

0 commit comments

Comments
 (0)