Skip to content

Commit

Permalink
feat: 카테고리별 게시글 조회 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
kyeong-hyeok committed Oct 7, 2023
1 parent a9bbfb3 commit be34ed4
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 10 deletions.
24 changes: 24 additions & 0 deletions src/main/java/com/kusitms/teamc/common/dto/SliceResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kusitms.teamc.common.dto;

import org.springframework.data.domain.Slice;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import java.util.List;

public record SliceResponseDto<T>(
List<T> content,
int numberOfElements,
boolean hasNext

) {
public static <T> ResponseEntity<SliceResponseDto> ok(Slice<T> slice) {
return ResponseEntity.status(HttpStatus.OK)
.body(new SliceResponseDto<>(
slice.getContent(),
slice.getNumberOfElements(),
slice.hasNext()
));
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
package com.kusitms.teamc.domain.article.controller;

import com.kusitms.teamc.common.dto.SliceResponseDto;
import com.kusitms.teamc.domain.article.dto.response.ArticleResponseDto;
import com.kusitms.teamc.domain.article.entity.Article;
import com.kusitms.teamc.domain.article.repository.ArticleRepository;
import com.kusitms.teamc.domain.article.service.ArticleService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -13,14 +19,15 @@
import java.util.List;

@RestController
@RequestMapping("/article")
@RequiredArgsConstructor
@RequestMapping("/api/articles")
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;

private ArticleService articleService;

@GetMapping("/category")
public ResponseEntity<List<Article>> getArticlesByCategory(@RequestParam("search") String category) {
List<Article> articles = articleRepository.findByCategory(category);
return new ResponseEntity<>(articles, HttpStatus.OK);
public ResponseEntity<SliceResponseDto> getArticlesByCategory(@RequestParam("search") String category, Pageable pageable) {
Slice<ArticleResponseDto> response = articleService.getArticlesByCategory(category, pageable);
return SliceResponseDto.ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
package com.kusitms.teamc.domain.article.dto.response;

public record ArticleResponseDto() {
import com.kusitms.teamc.domain.article.entity.Article;

public record ArticleResponseDto(String title, String content) {

public static ArticleResponseDto from(Article article) {
return new ArticleResponseDto(article.getTitle(), article.getContent());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;


@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Entity
public class Article extends BaseTimeEntity {

Expand All @@ -17,7 +24,7 @@ public class Article extends BaseTimeEntity {
private Long id;
private Category category;
private String title;
private String description;
private String content;

}

Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.kusitms.teamc.domain.article.repository;

import com.kusitms.teamc.domain.article.entity.Article;
import com.kusitms.teamc.domain.article.entity.Category;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ArticleRepository extends JpaRepository<Article, Integer> {
List<Article> findByCategory(String category);
Slice<Article> findAllByCategory(Category category, Pageable pageable);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.kusitms.teamc.domain.article.service;

import com.kusitms.teamc.domain.article.dto.response.ArticleResponseDto;
import com.kusitms.teamc.domain.article.entity.Article;
import com.kusitms.teamc.domain.article.entity.Category;
import com.kusitms.teamc.domain.article.repository.ArticleRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Slf4j
@Transactional
@RequiredArgsConstructor
public class ArticleService {

private final ArticleRepository articleRepository;

public Slice<ArticleResponseDto> getArticlesByCategory(String search, Pageable pageable) {
Category category = Category.create(search);
Slice<Article> articles = articleRepository.findAllByCategory(category, pageable);
Slice<ArticleResponseDto> response = articles.map(a -> ArticleResponseDto.from(a));
return response;
}
}
2 changes: 1 addition & 1 deletion src/main/resources/import.sql
Original file line number Diff line number Diff line change
@@ -1 +1 @@
INSERT INTO Member (id, name, role, createdDate, modifiedDate) VALUES (1, '민경혁', 'USER', now(), now());
INSERT INTO member (id, name, role, createdDate, modifiedDate) VALUES (1, '민경혁', 'USER', now(), now());

0 comments on commit be34ed4

Please sign in to comment.