Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,45 @@ public class NewsletterController {

private final NewsletterService newsletterService;

/**
* 메인 페이지 뉴스레터 핫토픽 목록 보기
* @param category
* @return
*/
@GetMapping("/list")
public ApiResponse<List<NewsletterListResponseDto>> getNewsletterList(@RequestParam("category") String category,
public ApiResponse<List<NewsletterListResponseDto>> getNewsletterList(@RequestParam("category") String category) {
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsletterList(category));
}

/**
* 더보기 페이지 뉴스레터 핫토픽 랭킹 보기
* @param category
* @param date
* @return
*/
@GetMapping("/list/likes")
public ApiResponse<List<NewsletterListResponseDto>> getNewsletterListWithLikes(@RequestParam("category") String category,
@RequestParam("date") LocalDate date) {
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsLetterList(category, date));
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsletterListWithLikes(category, date));
}

/**
* 더보기 페이지 이전 뉴스레터 목록 보기
* @param category
* @return
*/
@GetMapping("/list/previous")
public ApiResponse<List<NewsletterListResponseDto>> getNewsletterListPrevious(@RequestParam("category") String category) {
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsletterListPrevious(category));
}

/**
* 상세 페이지 뉴스레터 보기
* @param newsletterId
* @return
*/
@GetMapping("/detail")
public ApiResponse<NewsletterResponseDto> getNewsletter(@RequestParam("newsletterId") String newsletterId) {
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsLetter(newsletterId));
public ApiResponse<NewsletterResponseDto> getNewsletterDetail(@RequestParam("newsletterId") Long newsletterId) {
return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsLetterDetail(newsletterId));
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package com.example.koschool.domain.newsletter.dto.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class NewsletterListResponseDto {

private Long newsletterId;
private Long id;
private String title;

@Builder
private NewsletterListResponseDto(Long newsletterId, String title) {
this.newsletterId = newsletterId;
this.title = title;
}

}
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
package com.example.koschool.domain.newsletter.dto.response;

import com.example.koschool.domain.newsletter.entity.Newsletter;
import java.util.Random;
import lombok.Builder;
import lombok.Getter;

@Getter
public class NewsletterResponseDto {

private String title;
private String summary;
private Integer likes;
private String stock;
private String link;

Random random = new Random();

@Builder
private NewsletterResponseDto(String title, String summary, Integer likes, String stock, String link) {
this.title = title;
this.summary = summary;
this.likes = random.nextInt(240)+11;
this.likes = likes;
this.stock = stock;
this.link = link;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,25 @@
import com.example.koschool.domain.newsletter.entity.Newsletter;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import javax.swing.text.html.Option;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface NewsletterRepository extends JpaRepository<Newsletter, String> {
@Query("SELECT NEW com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto(n.id, n.title)"
+ "FROM Newsletter n "
+ "WHERE n.category = :category AND n.date = :date")
List<NewsletterListResponseDto> findByCategoryAndDate(String category, LocalDate date);

List<Newsletter> findTop3ByCategoryOrderByIdDesc(String category);

@Query("SELECT n FROM Newsletter n WHERE n.category = :category " +
"AND n.date BETWEEN :startDate AND :endDate ORDER BY n.likes DESC")
List<Newsletter> findTop3ByCategoryAndDateBetweenOrderByLikesDesc(@Param("category") String category,
@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate, Pageable pageable);

List<Newsletter> findAllByCategoryOrderByIdDesc(String category);

Optional<Newsletter> findById(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -20,15 +23,32 @@ public class NewsletterService {

private final NewsletterRepository newsletterRepository;

public List<NewsletterListResponseDto> getNewsLetterList(String category, LocalDate date) {
return newsletterRepository.findByCategoryAndDate(category, date);
public List<NewsletterListResponseDto> getNewsletterList(String category) {
List<Newsletter> newsletters = newsletterRepository.findTop3ByCategoryOrderByIdDesc(category);
return newsletters.stream()
.map(newsletter -> new NewsletterListResponseDto(newsletter.getId(), newsletter.getTitle()))
.collect(Collectors.toList());
}

public NewsletterResponseDto getNewsLetter(String newsletterId) {
Optional<Newsletter> newsletter = newsletterRepository.findById(newsletterId);
if(newsletter.isEmpty()){
throw new CustomException(ErrorCode.NEWSLETTER_NOT_FOUND);
}
return NewsletterResponseDto.fromEntityToDto(newsletter.get());
public List<NewsletterListResponseDto> getNewsletterListWithLikes(String category, LocalDate date) {
Pageable pageable = PageRequest.of(0, 3);
List<Newsletter> newsletters = newsletterRepository.findTop3ByCategoryAndDateBetweenOrderByLikesDesc(
category, date.minusMonths(1), date, pageable);
return newsletters.stream()
.map(newsletter -> new NewsletterListResponseDto(newsletter.getId(), newsletter.getTitle()))
.collect(Collectors.toList());
}

public List<NewsletterListResponseDto> getNewsletterListPrevious(String category) {
List<Newsletter> newsletters = newsletterRepository.findAllByCategoryOrderByIdDesc(category);
return newsletters.stream()
.map(newsletter -> new NewsletterListResponseDto(newsletter.getId(), newsletter.getTitle()))
.collect(Collectors.toList());
}

public NewsletterResponseDto getNewsLetterDetail(Long newsletterId) {
Newsletter newsletter = newsletterRepository.findById(newsletterId)
.orElseThrow(() -> new CustomException(ErrorCode.NEWSLETTER_NOT_FOUND));
return NewsletterResponseDto.fromEntityToDto(newsletter);
}
}