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..3e0675f --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/NewsletterController.java @@ -0,0 +1,34 @@ +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; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/newsletter") +public class NewsletterController { + + private final NewsletterService newsletterService; + + @GetMapping("/list") + public ApiResponse> getNewsletterList(@RequestParam("category") String category, + @RequestParam("date") LocalDate 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/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/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 30424c0..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 @@ -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; @@ -23,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; /** * 제목 @@ -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..c01ea9d --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/repository/NewsletterRepository.java @@ -0,0 +1,23 @@ +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; +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.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 new file mode 100644 index 0000000..3cde7dd --- /dev/null +++ b/src/main/java/com/example/koschool/domain/newsletter/service/NewsletterService.java @@ -0,0 +1,35 @@ +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; + +@RequiredArgsConstructor +@Service +@Transactional(readOnly = true) +public class NewsletterService { + + private final NewsletterRepository newsletterRepository; + + 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 new file mode 100644 index 0000000..9db3934 --- /dev/null +++ b/src/main/java/com/example/koschool/domain/quiz/QuizController.java @@ -0,0 +1,12 @@ +package com.example.koschool.domain.quiz; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +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; }