diff --git a/review/build.gradle b/review/build.gradle index 7fc8217..5d62313 100644 --- a/review/build.gradle +++ b/review/build.gradle @@ -22,7 +22,7 @@ repositories { } ext { - set('springCloudVersion', "2022.0.0") + set('springCloudVersion', "2022.0.3") } dependencies { @@ -32,6 +32,11 @@ dependencies { developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + runtimeOnly("com.mysql:mysql-connector-j") + implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' + + + implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2' //spring boot 3.0 ver => mybatis 3 버전 써야됨 } dependencyManagement { diff --git a/review/src/main/java/com/msaclub/review/ReviewApplication.java b/review/src/main/java/com/msaclub/review/ReviewApplication.java index a1c780a..0c40559 100644 --- a/review/src/main/java/com/msaclub/review/ReviewApplication.java +++ b/review/src/main/java/com/msaclub/review/ReviewApplication.java @@ -3,6 +3,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @EnableDiscoveryClient @@ -10,8 +11,6 @@ public class ReviewApplication { public static void main(String[] args) { SpringApplication.run(ReviewApplication.class, args); - System.out.println("bye"); - } } diff --git a/review/src/main/java/com/msaclub/review/controller/ReviewController.java b/review/src/main/java/com/msaclub/review/controller/ReviewController.java new file mode 100644 index 0000000..5ba6465 --- /dev/null +++ b/review/src/main/java/com/msaclub/review/controller/ReviewController.java @@ -0,0 +1,172 @@ +package com.msaclub.review.controller; + + +import com.msaclub.review.model.ReviewDto; +import com.msaclub.review.service.ReviewService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +@RestController +@RequestMapping("/review") +@Slf4j +public class ReviewController { + + @Autowired + ReviewService reviewService; + + + @GetMapping("/DBConnectionTest") + public String testConnection() { + try { + int number = reviewService.getNumberOfPurchaseList("ssafy"); + return "조회 성공"; + } catch(Exception e) { + System.out.println(e); + return "DB Connection Error : 로그 메시지 참고해주세요"; + } + } + @GetMapping("/testGetNumberOfPurchaseList") + public String testGetNumberOfPurchaseList() { + + int number = reviewService.getNumberOfPurchaseList("ssafy"); + log.info(number + "개 구매하였습니다"); + + return "testGetNumberOfPurchaseList"; + } + + + + @GetMapping("/testGetPurchaseListByDate") + public String testGetPurchaseListByDate() { + String startString = "2020-01-01 12:34:56"; + String endString = "2023-12-25 12:34:56"; + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime startTime = LocalDateTime.parse(startString, formatter); + LocalDateTime endTime = LocalDateTime.parse(endString, formatter); + + + List result = reviewService.getPurchaseListByDate("ssafy", Timestamp.valueOf(startTime), Timestamp.valueOf(endTime)); + log.info(result.toString()); + + return "testGetPurchaseListByDate"; + } + + @GetMapping("/testGetPurchaseList") + public String testGetPurchaseList() { + List result = reviewService.getPurchaseList("ssafy"); + + log.info(result.toString()); + return "testGetPurchaseList"; + } + + @GetMapping("/testIsBuyer") + public String testIsBuyer() { + boolean isBuyer = reviewService.isBuyer("ssafy", "galaxys23"); + + if(isBuyer) + log.info("true"); + else + log.info("false"); + + return "testIsBuyer"; + } + + /*check*/ + @GetMapping("/testReview") + public String testReview() { + boolean result = reviewService.review(1, "내용을 수정하겠습니다"); + if(result) { + log.info("수정 성공!!"); + } else { + log.info("수정 실패!!"); + } + return "testReview"; + } + + /*check*/ + @GetMapping("/testDeleteReview") + public String testDeleteReview() { + boolean result = reviewService.deleteReview(1); + if(result) { + log.info("성공적으로 삭제하였습니다"); + } else { + log.info("삭제에 실패했습니다"); + } + return "testDeleteReview"; + } + + @GetMapping("/testGetReviewByReviewId") + public String testGetReviewByReviewId() { + ReviewDto result = reviewService.getReviewByReviewId(1); + if(result != null) { + log.info(result.toString()); + } else { + log.info("조회에 실패했습니다"); + } + return "testGetReviewByReviewId"; + } +//// + @GetMapping("/testGetReviewCount") + public String testGetReviewCount() { + int number = reviewService.getReviewCount("ssafy"); + log.info(number + "개의 리뷰를 작성했습니다"); + return "testGetReviewCount"; + } + + @GetMapping("/testGetReviewByUserId") + public String testGetReviewByUserId() { + List result = reviewService.getReviewByUserId("ssafy"); + if(result != null) { + log.info(result.toString()); + } else { + log.info("조회에 실패했습니다"); + } + return "testGetReviewByUserId"; + } + + @GetMapping("/testGetReviewByUserIdWithParam") + public String testGetReviewByUserIdWithParam() { + int pageNo = 2; + int reviewPerPage = 3; + List result = reviewService.getReviewByUserIdWithParam("ssafy", pageNo, reviewPerPage); + if(result != null) { + log.info(result.toString()); + } else { + log.info("조회에 실패했습니다"); + } + return "testGetReviewByUserIdWithParam"; + } + + // + @GetMapping("/testGetReviewByRating") + public String testGetReviewByRating() { + List result = reviewService.getReviewByRating("galaxy", true); + if(result != null) { + log.info(result.toString()); + } else { + log.info("조회에 실패했습니다"); + } + return "testGetReviewByRating"; + } + + +// + @GetMapping("/testGetReviewAvg") + public String testGetReviewAvg() { + + double avgRating = reviewService.getReviewAvg("galaxy"); + log.info(String.valueOf(avgRating)); + + return "testGetReviewAvg"; + } +} diff --git a/review/src/main/java/com/msaclub/review/model/ReviewDto.java b/review/src/main/java/com/msaclub/review/model/ReviewDto.java new file mode 100644 index 0000000..96e99b1 --- /dev/null +++ b/review/src/main/java/com/msaclub/review/model/ReviewDto.java @@ -0,0 +1,34 @@ +package com.msaclub.review.model; + +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class ReviewDto { + + private String reviewId; + private String userId; + private String productId; + private int rating; + private String comment; + private LocalDateTime createdAt; + private LocalDateTime modifiedAt; + private boolean deleted; + + @Override + public String toString() { + return "ReviewDto{" + + "reviewId='" + reviewId + '\'' + + ", userId='" + userId + '\'' + + ", productId='" + productId + '\'' + + ", rating=" + rating + + ", comment='" + comment + '\'' + + ", createdAt=" + createdAt + + ", modifiedAt=" + modifiedAt + + ", deleted=" + deleted + + "}\n"; + } +} diff --git a/review/src/main/java/com/msaclub/review/model/mapper/ReviewMapper.java b/review/src/main/java/com/msaclub/review/model/mapper/ReviewMapper.java new file mode 100644 index 0000000..2a0ba60 --- /dev/null +++ b/review/src/main/java/com/msaclub/review/model/mapper/ReviewMapper.java @@ -0,0 +1,44 @@ +package com.msaclub.review.model.mapper; + +import com.msaclub.review.model.ReviewDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.sql.Timestamp; +import java.util.List; + +@Mapper +@Repository +public interface ReviewMapper { + + int getNumberOfPurchaseList(String userId); + + + List getPurchaseListByDate(@Param("userId") String userId, @Param("start") Timestamp start, @Param("end") Timestamp end); + + List getPurchaseList(String userId); + + boolean isBuyer(String userId, String productId); + + boolean review(int reviewId, String content); + + boolean deleteReview(int reviewId); + + ReviewDto getReviewByReviewId(int reviewId); + + int getReviewCount(String userId); + + List getReviewByUserId(String userId); + + List getReviewByUserIdWithParam(String userId, int pageNo, int reviewPerPage); + + List getReviewByRating(String productId, boolean isAscending); + + + double getReviewAvg(String productId); + + + + +} diff --git a/review/src/main/java/com/msaclub/review/service/ReviewService.java b/review/src/main/java/com/msaclub/review/service/ReviewService.java new file mode 100644 index 0000000..86b6afe --- /dev/null +++ b/review/src/main/java/com/msaclub/review/service/ReviewService.java @@ -0,0 +1,51 @@ +package com.msaclub.review.service; + +import com.msaclub.review.model.ReviewDto; + +import java.sql.Timestamp; +import java.util.List; + +public interface ReviewService { + + + // 현재 구매자의 구매 목록 갯수 가져오기 + int getNumberOfPurchaseList(String userId); + + // 현재 구매자의 날짜별 구매 목록 가져오기 + List getPurchaseListByDate(String userId, Timestamp start, Timestamp end); + + + // 현재 구매자의 구매 리스트 가져오기 + List getPurchaseList(String userId); + + // 현재 댓글 쓰기 기능을 요청한 사용자가 구매자가 맞나 판별 + boolean isBuyer(String userId, String productId); + + // 리뷰 수정 + boolean review(int reviewId, String content); + + // 리뷰 삭제 + boolean deleteReview(int reviewId); + + // 리뷰 조회 (by reviewId) + ReviewDto getReviewByReviewId(int reviewId); + + // 어떤 유저가 작성한 리뷰 갯수 반환하기 + int getReviewCount(String userId); + + // 리뷰 조회 (by userId) + List getReviewByUserId(String userId); + + // 리뷰 조회 + List getReviewByUserIdWithParam(String userId, int pageNo, int reviewPerPage); + + // 리뷰 점수 순으로 조회하기 + List getReviewByRating(String productId, boolean isAsending); + + // 리뷰 평점 계산하기 + double getReviewAvg(String productId); + + + + +} diff --git a/review/src/main/java/com/msaclub/review/service/ReviewServiceImpl.java b/review/src/main/java/com/msaclub/review/service/ReviewServiceImpl.java new file mode 100644 index 0000000..b76cefe --- /dev/null +++ b/review/src/main/java/com/msaclub/review/service/ReviewServiceImpl.java @@ -0,0 +1,81 @@ +package com.msaclub.review.service; + +import com.msaclub.review.model.ReviewDto; +import com.msaclub.review.model.mapper.ReviewMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.util.List; + +@Service +public class ReviewServiceImpl implements ReviewService { + + @Autowired + ReviewMapper reviewMapper; + + + @Override + public int getNumberOfPurchaseList(String userId) { + return reviewMapper.getNumberOfPurchaseList(userId); + } + + + @Override + public List getPurchaseListByDate(String userId, Timestamp start, Timestamp end) { + + return reviewMapper.getPurchaseListByDate(userId, start, end); + } + + + @Override + public List getPurchaseList(String userId) { + return reviewMapper.getPurchaseList(userId); + } + + @Override + public boolean isBuyer(String userId, String productId) { + return reviewMapper.isBuyer(userId, productId); + } + + @Override + public boolean review(int reviewId, String content) { + return reviewMapper.review(reviewId, content); + } + + @Override + public boolean deleteReview(int reviewId) { + return reviewMapper.deleteReview(reviewId); + } + + @Override + public ReviewDto getReviewByReviewId(int reviewId) { + return reviewMapper.getReviewByReviewId(reviewId); + } + + @Override + public int getReviewCount(String userId) { + return reviewMapper.getReviewCount(userId); + } + + @Override + public List getReviewByUserId(String userId) { + return reviewMapper.getReviewByUserId(userId); + } + + @Override + public List getReviewByUserIdWithParam(String userId, int pageNo, int reviewPerPage) { + return reviewMapper.getReviewByUserIdWithParam(userId, pageNo, reviewPerPage); + } + + @Override + public List getReviewByRating(String productId, boolean isAsending) { + return reviewMapper.getReviewByRating(productId, isAsending); + } + + @Override + public double getReviewAvg(String productId) { + return reviewMapper.getReviewAvg(productId); + } + +} diff --git a/review/src/main/resources/application.yml b/review/src/main/resources/application.yml index 6c28fca..287aba2 100644 --- a/review/src/main/resources/application.yml +++ b/review/src/main/resources/application.yml @@ -5,6 +5,19 @@ server: spring: application: name: review + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/msa?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8 + username: ssafy + password: ssafy + + +mybatis: + type-aliases-package: com.msaclub.review.model.mapper + mapper-locations: classpath:mybatis/mapper/*.xml + + + eureka: instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} @@ -12,4 +25,5 @@ eureka: fetch-registry: true register-with-eureka: true service-url: - defaultZone: http://3.143.74.33:8761/eureka \ No newline at end of file + defaultZone: http://3.143.74.33:8761/eureka + diff --git a/review/src/main/resources/mybatis/mapper/ReviewMapper.xml b/review/src/main/resources/mybatis/mapper/ReviewMapper.xml new file mode 100644 index 0000000..669b6a5 --- /dev/null +++ b/review/src/main/resources/mybatis/mapper/ReviewMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + UPDATE review SET content = #{content} WHERE reviewId = #{reviewId} + + + + DELETE FROM review WHERE reviewId = #{reviewId} + + + + + + + + + + + + + + +