msa : msa - webbook chapter payment

This commit is contained in:
haerong22
2021-07-31 21:00:46 +09:00
parent b69e694be9
commit f2b6b9bd72
14 changed files with 236 additions and 9 deletions

View File

@@ -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));
}
}

View File

@@ -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;
}

View File

@@ -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> {
}

View File

@@ -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();
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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));
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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));
}
}

View File

@@ -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();
}
}

View File

@@ -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());
}
}