msa : msa - webbook chapter payment
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package com.paymentdemo.controller;
|
||||
|
||||
import com.paymentdemo.model.dto.WebBookChapterPaymentDto;
|
||||
import com.paymentdemo.service.PaymentService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("")
|
||||
@RequiredArgsConstructor
|
||||
public class PaymentController {
|
||||
|
||||
private final PaymentService paymentService;
|
||||
|
||||
@PostMapping
|
||||
ResponseEntity<Long> webBookChapterPayment(WebBookChapterPaymentDto webBookChapterPaymentDto){
|
||||
return ResponseEntity.ok(paymentService.webBookChapterPayment(webBookChapterPaymentDto));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.paymentdemo.model.dto;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WebBookChapterPaymentDto {
|
||||
|
||||
private Long writerId; // null
|
||||
private Long readerId; //
|
||||
private Long webBookChapterId;
|
||||
private Integer amount;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.paymentdemo.model.entity.repository;
|
||||
|
||||
import com.paymentdemo.model.entity.WebBookChapterPayment;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface WebBookChapterPaymentRepository extends JpaRepository<WebBookChapterPayment,Long> {
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.paymentdemo.service;
|
||||
|
||||
import com.paymentdemo.model.dto.WebBookChapterPaymentDto;
|
||||
import com.paymentdemo.model.entity.WebBookChapterPayment;
|
||||
import com.paymentdemo.model.entity.repository.WebBookChapterPaymentRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PaymentService {
|
||||
|
||||
private final WebBookChapterPaymentRepository webBookChapterPaymentRepository;
|
||||
|
||||
public Long webBookChapterPayment(WebBookChapterPaymentDto webBookChapterPaymentDto) {
|
||||
return webBookChapterPaymentRepository.save(
|
||||
WebBookChapterPayment.builder()
|
||||
.webBookChapterId(webBookChapterPaymentDto.getWebBookChapterId())
|
||||
.readerId(webBookChapterPaymentDto.getReaderId())
|
||||
.amount(webBookChapterPaymentDto.getAmount())
|
||||
.createdAt(LocalDateTime.now())
|
||||
.build()
|
||||
).getWebBookChapterPaymentId();
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,13 @@
|
||||
package com.userdemo.client;
|
||||
|
||||
import com.userdemo.model.dto.WebBookChapterPaymentDto;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
@FeignClient(value = "payment", url = "${external-api.payment.url}")
|
||||
public interface PaymentClient {
|
||||
|
||||
@PostMapping
|
||||
Long webBookChapterPayment(@RequestBody WebBookChapterPaymentDto build);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.userdemo.client;
|
||||
import com.userdemo.client.form.WebBookChapterRegisterForm;
|
||||
import com.userdemo.client.form.WebBookRegisterForm;
|
||||
import com.userdemo.model.dto.ReaderWebBookChapterDto;
|
||||
import com.userdemo.model.dto.WebBookChapterDetailDto;
|
||||
import com.userdemo.model.dto.WebBookDto;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -26,4 +27,7 @@ public interface WebBookClient {
|
||||
|
||||
@GetMapping("/chapter")
|
||||
List<ReaderWebBookChapterDto> getWebBookChapterList(@RequestParam("webBookId") Long webBookId);
|
||||
|
||||
@GetMapping("/chapter/detail")
|
||||
WebBookChapterDetailDto getWebBookChapterDetail(@RequestParam("webBookChapterId") long webBookChapterId);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.userdemo.controller;
|
||||
|
||||
import com.userdemo.model.dto.ReaderWebBookChapterDto;
|
||||
import com.userdemo.model.dto.WebBookChapterDto;
|
||||
import com.userdemo.model.dto.WebBookDto;
|
||||
import com.userdemo.model.form.RegisterReaderForm;
|
||||
import com.userdemo.model.form.WebBookChapterPaymentForm;
|
||||
import com.userdemo.service.ReaderService;
|
||||
import com.userdemo.service.ReaderWebBookService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -35,11 +37,11 @@ public class ReaderController {
|
||||
@PathVariable(value = "webBookId") Long webBookId) {
|
||||
return ResponseEntity.ok().body(readerWebBookService.getWebBookChapterList(readerId, webBookId));
|
||||
}
|
||||
//
|
||||
// @PostMapping("/{readerId}/payment")
|
||||
// public ResponseEntity<WebBookChapterPaidDto> paymentWebBookChapter(
|
||||
// @PathVariable(value = "readerId") Long readerId,
|
||||
// @RequestBody WebBookChapterPaymentForm webBookChapterPaymentForm) {
|
||||
// return ResponseEntity.ok().body(webBookPaymentService.payment(readerId, webBookChapterPaymentForm));
|
||||
// }
|
||||
|
||||
@PostMapping("/{readerId}/payment")
|
||||
public ResponseEntity<WebBookChapterDto> paymentWebBookChapter(
|
||||
@PathVariable(value = "readerId") Long readerId,
|
||||
@RequestBody WebBookChapterPaymentForm webBookChapterPaymentForm) {
|
||||
return ResponseEntity.ok().body(readerWebBookService.paymentWebBookChapter(readerId, webBookChapterPaymentForm));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.userdemo.model.dto;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WebBookChapterDetailDto {
|
||||
|
||||
private Long webBookChapterId;
|
||||
//제목
|
||||
private String name;
|
||||
// //내용
|
||||
private String detail;
|
||||
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
private Integer price;
|
||||
|
||||
// private Boolean isPaid;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.userdemo.model.dto;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WebBookChapterPaymentDto {
|
||||
|
||||
private Long writerId; // null
|
||||
private Long readerId; //
|
||||
private Long webBookChapterId;
|
||||
private Integer amount;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.userdemo.model.entity.repository;
|
||||
|
||||
import com.userdemo.model.entity.ReaderWebBookChapter;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ReaderWebBookChapterRepository extends JpaRepository<ReaderWebBookChapter,Long> {
|
||||
|
||||
ReaderWebBookChapter findByReaderIdAndWebBookChapterId(Long readerId, Long webBookChapterId);
|
||||
|
||||
}
|
||||
@@ -1,11 +1,15 @@
|
||||
package com.userdemo.service;
|
||||
|
||||
import com.userdemo.client.PaymentClient;
|
||||
import com.userdemo.client.WebBookClient;
|
||||
import com.userdemo.model.dto.ReaderWebBookChapterDto;
|
||||
import com.userdemo.model.dto.WebBookDto;
|
||||
import com.userdemo.model.dto.*;
|
||||
import com.userdemo.model.entity.ReaderWebBookChapter;
|
||||
import com.userdemo.model.entity.repository.ReaderWebBookChapterRepository;
|
||||
import com.userdemo.model.form.WebBookChapterPaymentForm;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@@ -13,6 +17,8 @@ import java.util.List;
|
||||
public class ReaderWebBookService {
|
||||
|
||||
private final WebBookClient webBookClient;
|
||||
private final PaymentClient paymentClient;
|
||||
private final ReaderWebBookChapterRepository readerWebBookChapterRepository;
|
||||
|
||||
public List<WebBookDto> getWebBookList() {
|
||||
return webBookClient.getWebBookList();
|
||||
@@ -21,4 +27,38 @@ public class ReaderWebBookService {
|
||||
public List<ReaderWebBookChapterDto> getWebBookChapterList(Long readerId, Long webBookId) {
|
||||
return webBookClient.getWebBookChapterList(webBookId);
|
||||
}
|
||||
|
||||
public WebBookChapterDto paymentWebBookChapter(Long readerId, WebBookChapterPaymentForm webBookChapterPaymentForm) {
|
||||
|
||||
// 결제는 paymentClient
|
||||
Long webBookChapterPaymentId = paymentClient.webBookChapterPayment(
|
||||
WebBookChapterPaymentDto.builder()
|
||||
.webBookChapterId(webBookChapterPaymentForm.getWebBookChapterId())
|
||||
.readerId(readerId)
|
||||
.amount(webBookChapterPaymentForm.getPrice())
|
||||
.build()
|
||||
);
|
||||
// 가격이 다르면 exception
|
||||
|
||||
// webBookClient 에서 detail 가져온다.
|
||||
WebBookChapterDetailDto detail
|
||||
= webBookClient.getWebBookChapterDetail(webBookChapterPaymentForm.getWebBookChapterId());
|
||||
|
||||
readerWebBookChapterRepository.save(
|
||||
ReaderWebBookChapter.builder()
|
||||
.webBookChapterId(webBookChapterPaymentForm.getWebBookChapterId())
|
||||
.readerId(readerId)
|
||||
.webBookChapterPaymentId(webBookChapterPaymentId)
|
||||
.paymentAmount(webBookChapterPaymentForm.getPrice())
|
||||
.createdAt(LocalDateTime.now())
|
||||
.build()
|
||||
);
|
||||
|
||||
return WebBookChapterDto.builder()
|
||||
.webBookChapterId(webBookChapterPaymentForm.getWebBookChapterId())
|
||||
.name(detail.getName())
|
||||
.detail(detail.getDetail())
|
||||
.createdAt(detail.getCreatedAt())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.webbookdemo.controller;
|
||||
|
||||
import com.webbookdemo.model.dto.WebBookChapterDetailDto;
|
||||
import com.webbookdemo.model.dto.WebBookChapterDto;
|
||||
import com.webbookdemo.model.dto.WebBookDto;
|
||||
import com.webbookdemo.model.form.WebBookChapterRegisterForm;
|
||||
@@ -37,4 +38,9 @@ public class WebBookController {
|
||||
public ResponseEntity<List<WebBookChapterDto>> getWebBookChapterList(Long webBookId) {
|
||||
return ResponseEntity.ok().body(webBookService.getWebBookChapterList(webBookId));
|
||||
}
|
||||
|
||||
@GetMapping("/chapter/detail")
|
||||
public ResponseEntity<WebBookChapterDetailDto> getWebBookChapterDetail(Long webBookChapterId){
|
||||
return ResponseEntity.ok(webBookService.getWebBookChapterDetail(webBookChapterId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.webbookdemo.model.dto;
|
||||
|
||||
import com.webbookdemo.model.entity.WebBookChapter;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WebBookChapterDetailDto {
|
||||
|
||||
private Long webBookChapterId;
|
||||
//제목
|
||||
private String name;
|
||||
// //내용
|
||||
private String detail;
|
||||
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
private Integer price;
|
||||
|
||||
|
||||
public static WebBookChapterDetailDto from(WebBookChapter webBookChapter){
|
||||
return WebBookChapterDetailDto.builder()
|
||||
.webBookChapterId(webBookChapter.getWebBookChapterId())
|
||||
.name(webBookChapter.getName())
|
||||
.detail(webBookChapter.getDetail())
|
||||
.createdAt(webBookChapter.getCreatedAt())
|
||||
.price(webBookChapter.getPrice())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.webbookdemo.service;
|
||||
|
||||
import com.webbookdemo.model.dto.WebBookChapterDetailDto;
|
||||
import com.webbookdemo.model.dto.WebBookChapterDto;
|
||||
import com.webbookdemo.model.dto.WebBookDto;
|
||||
import com.webbookdemo.model.entity.WebBook;
|
||||
@@ -61,4 +62,9 @@ public class WebBookService {
|
||||
.map(WebBookChapterDto::from)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public WebBookChapterDetailDto getWebBookChapterDetail(Long webBookChapterId){
|
||||
return WebBookChapterDetailDto.from(
|
||||
webBookChapterRepository.findById(webBookChapterId).get());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user