From bdfa8aad3312392ff3b99e0049bd95a9c12f0371 Mon Sep 17 00:00:00 2001 From: SL313 Date: Mon, 3 Feb 2025 21:17:58 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=89=B4=EC=8A=A4=EB=A0=88?= =?UTF-8?q?=ED=84=B0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- .../domain/member/MemberController.java | 2 +- .../newsletter/NewsletterController.java | 27 +++++++++++++++++++ .../response/NewsletterListResponseDto.java | 18 +++++++++++++ .../domain/newsletter/entity/Newsletter.java | 7 +++++ .../repository/NewsletterRepository.java | 17 ++++++++++++ .../newsletter/service/NewsletterService.java | 21 +++++++++++++++ .../koschool/domain/quiz/QuizController.java | 15 +++++++++++ 8 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java create mode 100644 src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterListResponseDto.java create mode 100644 src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java create mode 100644 src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java create mode 100644 src/main/java/com/example/koschool/domain/quiz/QuizController.java diff --git a/.gitignore b/.gitignore index 83958b8..edbabd4 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,5 @@ out/ .vscode/ ### Database ### -/src/main/resources/application.yaml \ No newline at end of file +/src/main/resources/application.yaml +src/main/java/com/example/koschool/global/ddl.sql \ No newline at end of file diff --git a/src/main/java/com/example/koschool/domain/member/MemberController.java b/src/main/java/com/example/koschool/domain/member/MemberController.java index 345b757..62e250e 100644 --- a/src/main/java/com/example/koschool/domain/member/MemberController.java +++ b/src/main/java/com/example/koschool/domain/member/MemberController.java @@ -12,10 +12,10 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - @RestController @RequiredArgsConstructor @RequestMapping("/api/member") + public class MemberController { private final MemberService memberService; diff --git a/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java b/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java new file mode 100644 index 0000000..66bebca --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java @@ -0,0 +1,27 @@ +package com.example.koschool.domain.newsletter; + +import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.service.NewsletterService; +import com.example.koschool.global.ApiResponse; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/newsletter") +public class NewsletterController { + + private final NewsletterService newsletterService; + + @GetMapping("/") + public ApiResponse> getNewsLetterList(@RequestParam("category") String category, + @RequestParam("date") LocalDate date) { + return (ApiResponse>) newsletterService.getNewsLetterList(category, date); + } +} diff --git a/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterListResponseDto.java b/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterListResponseDto.java new file mode 100644 index 0000000..c963de9 --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterListResponseDto.java @@ -0,0 +1,18 @@ +package com.example.koschool.domain.newsletter.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class NewsletterListResponseDto { + + private Long newsletterId; + private String title; + + @Builder + private NewsletterListResponseDto(Long newsletterId, String title) { + this.newsletterId = newsletterId; + this.title = title; + } + +} diff --git a/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java b/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java index 30424c0..f50cdc8 100644 --- a/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java +++ b/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java @@ -10,6 +10,7 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; +import java.time.LocalDate; import java.util.List; import lombok.Getter; @@ -68,4 +69,10 @@ public class Newsletter { @Column(name = "stock_code") private String stockCode; + /** + * 날짜 + */ + @Column(name = "date") + private LocalDate date; + } diff --git a/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java b/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java new file mode 100644 index 0000000..be897ef --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java @@ -0,0 +1,17 @@ +package com.example.koschool.domain.newsletter.repository; + +import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.entity.Newsletter; +import java.time.LocalDate; +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface NewsletterRepository extends JpaRepository { + @Query("SELECT NEW com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto(n.newsletterId, n.title)" + + "FROM Newsletter n " + + "WHERE n.category = :category AND n.date = :date") + List findByCategoryAndDate(String category, LocalDate date); +} diff --git a/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java b/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java new file mode 100644 index 0000000..3fa8bbf --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java @@ -0,0 +1,21 @@ +package com.example.koschool.domain.newsletter.service; + +import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.repository.NewsletterRepository; +import java.time.LocalDate; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Service +@Transactional(readOnly = true) +public class NewsletterService { + + private final NewsletterRepository newsletterRepository; + + public List getNewsLetterList(String category, LocalDate date) { + return newsletterRepository.findByCategoryAndDate(category, date); + } +} diff --git a/src/main/java/com/example/koschool/domain/quiz/QuizController.java b/src/main/java/com/example/koschool/domain/quiz/QuizController.java new file mode 100644 index 0000000..162e2e5 --- /dev/null +++ b/src/main/java/com/example/koschool/domain/quiz/QuizController.java @@ -0,0 +1,15 @@ +package com.example.koschool.domain.quiz; + +import com.example.koschool.global.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/quiz") +public class QuizController { + +} From 5adac0c90b833a3ca8fa73457833090ab01ba500 Mon Sep 17 00:00:00 2001 From: SL313 Date: Mon, 3 Feb 2025 22:14:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EB=89=B4=EC=8A=A4=EB=A0=88?= =?UTF-8?q?=ED=84=B0=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newsletter/NewsletterController.java | 13 +++++-- .../dto/response/NewsletterResponseDto.java | 37 +++++++++++++++++++ .../domain/newsletter/entity/Newsletter.java | 4 +- .../repository/NewsletterRepository.java | 8 +++- .../newsletter/service/NewsletterService.java | 14 +++++++ .../entity/NewsletterLikes.java | 2 +- .../koschool/domain/quiz/QuizController.java | 5 +-- .../koschool/global/exception/ErrorCode.java | 4 +- 8 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterResponseDto.java diff --git a/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java b/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java index 66bebca..3e0675f 100644 --- a/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java +++ b/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java @@ -1,12 +1,14 @@ package com.example.koschool.domain.newsletter; import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.dto.response.NewsletterResponseDto; import com.example.koschool.domain.newsletter.service.NewsletterService; import com.example.koschool.global.ApiResponse; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -19,9 +21,14 @@ public class NewsletterController { private final NewsletterService newsletterService; - @GetMapping("/") - public ApiResponse> getNewsLetterList(@RequestParam("category") String category, + @GetMapping("/list") + public ApiResponse> getNewsletterList(@RequestParam("category") String category, @RequestParam("date") LocalDate date) { - return (ApiResponse>) newsletterService.getNewsLetterList(category, date); + return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsLetterList(category, date)); + } + + @GetMapping("/detail") + public ApiResponse getNewsletter(@RequestParam("newsletterId") String newsletterId) { + return ApiResponse.of(HttpStatus.OK, newsletterService.getNewsLetter(newsletterId)); } } diff --git a/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterResponseDto.java b/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterResponseDto.java new file mode 100644 index 0000000..8cc99fe --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/dto/response/NewsletterResponseDto.java @@ -0,0 +1,37 @@ +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 stockCode; + private String link; + + Random random = new Random(); + + @Builder + private NewsletterResponseDto(String title, String summary, Integer likes, String stockCode, String link) { + this.title = title; + this.summary = summary; + this.likes = random.nextInt(240)+11; + this.stockCode = stockCode; + this.link = link; + } + + public static NewsletterResponseDto fromEntityToDto(Newsletter newsletter) { + return NewsletterResponseDto.builder() + .title(newsletter.getTitle()) + .summary(newsletter.getSummary()) + .likes(newsletter.getLikes()) + .stockCode(newsletter.getStockCode()) + .link(newsletter.getLink()) + .build(); + } + +} diff --git a/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java b/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java index f50cdc8..3433309 100644 --- a/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java +++ b/src/main/java/com/example/koschool/domain/newsletter/entity/Newsletter.java @@ -24,8 +24,8 @@ public class Newsletter { */ @Id @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "newsletter_id", unique = true) - private Long newsletterId; + @Column(name = "id", unique = true) + private Long id; /** * 제목 diff --git a/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java b/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java index be897ef..c01ea9d 100644 --- a/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java +++ b/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java @@ -1,6 +1,7 @@ package com.example.koschool.domain.newsletter.repository; import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.dto.response.NewsletterResponseDto; import com.example.koschool.domain.newsletter.entity.Newsletter; import java.time.LocalDate; import java.util.List; @@ -10,8 +11,13 @@ @Repository public interface NewsletterRepository extends JpaRepository { - @Query("SELECT NEW com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto(n.newsletterId, n.title)" + @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 findByCategoryAndDate(String category, LocalDate date); + + @Query("SELECT NEW com.example.koschool.domain.newsletter.dto.response.NewsletterResponseDto(n.title, n.summary, n.likes, n.stockCode, n.link)" + + "FROM Newsletter n " + + "WHERE n.id = :newsletterId") + NewsletterResponseDto findNewsletterByNewsletterId(Long newsletterId); } diff --git a/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java b/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java index 3fa8bbf..3cde7dd 100644 --- a/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java +++ b/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java @@ -1,9 +1,14 @@ package com.example.koschool.domain.newsletter.service; import com.example.koschool.domain.newsletter.dto.response.NewsletterListResponseDto; +import com.example.koschool.domain.newsletter.dto.response.NewsletterResponseDto; +import com.example.koschool.domain.newsletter.entity.Newsletter; import com.example.koschool.domain.newsletter.repository.NewsletterRepository; +import com.example.koschool.global.exception.CustomException; +import com.example.koschool.global.exception.ErrorCode; import java.time.LocalDate; import java.util.List; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,4 +23,13 @@ public class NewsletterService { public List getNewsLetterList(String category, LocalDate date) { return newsletterRepository.findByCategoryAndDate(category, date); } + + public NewsletterResponseDto getNewsLetter(String newsletterId) { + System.out.println("asdfasdf"); + Optional newsletter = newsletterRepository.findById(newsletterId); + if(newsletter.isEmpty()){ + throw new CustomException(ErrorCode.NEWSLETTER_NOT_FOUND); + } + return NewsletterResponseDto.fromEntityToDto(newsletter.get()); + } } diff --git a/src/main/java/com/example/koschool/domain/newsletterLikes/entity/NewsletterLikes.java b/src/main/java/com/example/koschool/domain/newsletterLikes/entity/NewsletterLikes.java index 71c2403..86dba32 100644 --- a/src/main/java/com/example/koschool/domain/newsletterLikes/entity/NewsletterLikes.java +++ b/src/main/java/com/example/koschool/domain/newsletterLikes/entity/NewsletterLikes.java @@ -29,7 +29,7 @@ public class NewsletterLikes { * 뉴스레터 고유 id */ @ManyToOne - @JoinColumn(referencedColumnName = "newsletter_id", name = "newsletter_id", nullable = false) + @JoinColumn(referencedColumnName = "id", name = "newsletter_id", nullable = false) private Newsletter newsletter; /** diff --git a/src/main/java/com/example/koschool/domain/quiz/QuizController.java b/src/main/java/com/example/koschool/domain/quiz/QuizController.java index 162e2e5..9db3934 100644 --- a/src/main/java/com/example/koschool/domain/quiz/QuizController.java +++ b/src/main/java/com/example/koschool/domain/quiz/QuizController.java @@ -1,15 +1,12 @@ package com.example.koschool.domain.quiz; -import com.example.koschool.global.ApiResponse; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @RequestMapping("/api/quiz") public class QuizController { - + } diff --git a/src/main/java/com/example/koschool/global/exception/ErrorCode.java b/src/main/java/com/example/koschool/global/exception/ErrorCode.java index ddfc4d7..c11ccac 100644 --- a/src/main/java/com/example/koschool/global/exception/ErrorCode.java +++ b/src/main/java/com/example/koschool/global/exception/ErrorCode.java @@ -8,7 +8,9 @@ public enum ErrorCode { MEMBER_LOGINID_DUPLICATED("이미 존재하는 아이디입니다."), - MEMBER_NOT_FOUND("존재하지 않는 회원입니다."); + MEMBER_NOT_FOUND("존재하지 않는 회원입니다."), + + NEWSLETTER_NOT_FOUND("존재하지 않는 뉴스레터입니다."); private final String message; }