msa : msa - feign client 를 이용하여 모듈간(user, webbok) 연동 : add webbook

This commit is contained in:
haerong22
2021-07-31 18:09:35 +09:00
parent 8fdbc34379
commit a4b3ea5689
15 changed files with 378 additions and 0 deletions

View File

@@ -1,8 +1,13 @@
package com.userdemo.client;
import com.userdemo.client.form.WebBookRegisterForm;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "webBook", url = "${external-api.webBook.url}")
public interface WebBookClient {
@PostMapping("")
Long addBook(@RequestBody WebBookRegisterForm registerWebBookForm);
}

View File

@@ -0,0 +1,23 @@
package com.userdemo.client.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
@Setter
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
public class WebBookRegisterForm {
private Long writerId;
@ApiModelProperty(value = "웹소설 제목", example = "MSA 실습")
private String name;
@ApiModelProperty(value = "웹소설 설명", example = "Monolithic 에서 MSA 로 실습을 해 봅시다.")
private String description;
}

View File

@@ -0,0 +1,49 @@
//package com.userdemo.controller;
//
//import com.monolithicdemo.model.dto.WebBookChapterDto;
//import com.monolithicdemo.model.dto.WebBookChapterPaidDto;
//import com.monolithicdemo.model.dto.WebBookDto;
//import com.monolithicdemo.model.form.RegisterReaderForm;
//import com.monolithicdemo.model.form.WebBookChapterPaymentForm;
//import com.monolithicdemo.service.ReaderService;
//import com.monolithicdemo.service.WebBookPaymentService;
//import com.monolithicdemo.service.WebBookService;
//import lombok.RequiredArgsConstructor;
//import org.springframework.http.ResponseEntity;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
//@RestController
//@RequestMapping("/reader")
//@RequiredArgsConstructor
//public class ReaderController {
//
// private final ReaderService ReaderService;
// private final WebBookService webBookService;
// private final WebBookPaymentService webBookPaymentService;
//
// @PostMapping("/")
// public ResponseEntity<Long> registerReader(@RequestBody RegisterReaderForm registerReaderForm){
// return ResponseEntity.ok(ReaderService.registerReader(registerReaderForm));
// }
//
// @GetMapping("/webBook")
// public ResponseEntity<List<WebBookDto>> getWebBookList() {
// return ResponseEntity.ok().body(webBookService.getWebBookList());
// }
//
// @GetMapping("/{readerId}/webBook/{webBookId}/chapter")
// public ResponseEntity<List<WebBookChapterDto>> getWebBookChapterList(
// @PathVariable(value = "readerId") Long readerId,
// @PathVariable(value = "webBookId") Long webBookId) {
// return ResponseEntity.ok().body(webBookService.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));
// }
//}

View File

@@ -0,0 +1,38 @@
package com.userdemo.controller;
import com.userdemo.model.form.RegisterWebBookForm;
import com.userdemo.model.form.RegisterWriterForm;
import com.userdemo.service.WriterService;
import com.userdemo.service.WriterWebBookService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/writer")
@RequiredArgsConstructor
public class WriterController {
private final WriterService writerService;
private final WriterWebBookService writerWebBookService;
@PostMapping("/")
public ResponseEntity<Long> registerWriter(@RequestBody RegisterWriterForm registerWriterForm) {
return ResponseEntity.ok().body(writerService.registerWriter(registerWriterForm));
}
@PostMapping("/{writerId}/webBook")
public ResponseEntity<Long> registerWebBook(
@PathVariable(value = "writerId") Long writerId,
@RequestBody RegisterWebBookForm registerWebBookForm) {
return ResponseEntity.ok(writerWebBookService.registerWebBook(writerId, registerWebBookForm));
}
// @PostMapping("/{writerId}/webBook/{webBookId}")
// public ResponseEntity<Long> registerWebBookChapter(
// @PathVariable(value = "writerId") Long writerId,
// @PathVariable(value = "webBookId") Long webBookId,
// @RequestBody RegisterWebBookChapterForm registerWebBookChapterForm) {
// return ResponseEntity.ok(writerWebBookService.registerWebBookChapter(writerId, webBookId, registerWebBookChapterForm));
// }
}

View File

@@ -0,0 +1,15 @@
package com.userdemo.model.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@ApiModel
public class RegisterReaderForm {
@ApiModelProperty(value = "작가의 이름", example = "홍길동")
private String name;
}

View File

@@ -0,0 +1,22 @@
package com.userdemo.model.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@ApiModel
public class RegisterWebBookChapterForm {
@ApiModelProperty(value = "웹소설 제목", example = "MSA 실습")
private String name;
@ApiModelProperty(value = "웹소설 설명", example = "blah, blah ~~~")
private String detail;
@ApiModelProperty(value = "웹소설 가격", example = "100")
private Integer price;
}

View File

@@ -0,0 +1,19 @@
package com.userdemo.model.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@ApiModel
public class RegisterWebBookForm {
@ApiModelProperty(value = "웹소설 제목", example = "MSA 실습")
private String name;
@ApiModelProperty(value = "웹소설 설명", example = "Monolithic 에서 MSA 로 실습을 해 봅시다.")
private String description;
}

View File

@@ -0,0 +1,15 @@
package com.userdemo.model.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@ApiModel
public class RegisterWriterForm {
@ApiModelProperty(value = "작가의 이름", example = "홍길동")
private String name;
}

View File

@@ -0,0 +1,11 @@
package com.userdemo.model.form;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class WebBookChapterPaymentForm {
private Long webBookChapterId;
private Integer price;
}

View File

@@ -0,0 +1,28 @@
package com.userdemo.service;
import com.userdemo.model.entity.Reader;
import com.userdemo.model.entity.repository.ReaderRepository;
import com.userdemo.model.form.RegisterReaderForm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
/**
* Reader에 대한 CRUD
*/
@RequiredArgsConstructor
public class ReaderService {
private final ReaderRepository ReaderRepository;
public Long registerReader(RegisterReaderForm registerReaderForm) {
return ReaderRepository.save(
Reader.builder()
.name(registerReaderForm.getName())
.createdAt(LocalDateTime.now()).build()
).getReaderId();
}
}

View File

@@ -0,0 +1,30 @@
package com.userdemo.service;
import com.userdemo.model.entity.Writer;
import com.userdemo.model.entity.repository.WriterRepository;
import com.userdemo.model.form.RegisterWriterForm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
/**
* writer에 대한 CRUD
*/
@RequiredArgsConstructor
public class WriterService {
private final WriterRepository writerRepository;
public Long registerWriter(RegisterWriterForm registerWriterForm) {
return writerRepository.save(
Writer.builder()
.name(registerWriterForm.getName())
.createdAt(LocalDateTime.now()).build()
).getWriterId();
}
}

View File

@@ -0,0 +1,48 @@
package com.userdemo.service;
import com.userdemo.client.WebBookClient;
import com.userdemo.client.form.WebBookRegisterForm;
import com.userdemo.model.entity.repository.WriterRepository;
import com.userdemo.model.form.RegisterWebBookForm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
@RequiredArgsConstructor
public class WriterWebBookService {
private final WriterRepository writerRepository;
private final WebBookClient webBookClient;
public Long registerWebBook(Long writerId, RegisterWebBookForm registerWebBookForm) {
if (writerRepository.existsById(writerId)) {
WebBookRegisterForm webBookRegisterForm = WebBookRegisterForm.builder()
.writerId(writerId)
.name(registerWebBookForm.getName())
.description(registerWebBookForm.getDescription())
.build();
return webBookClient.addBook(webBookRegisterForm);
} else {
return null;
}
}
// public Long registerWebBookChapter(Long writerId, Long webBookId, RegisterWebBookChapterForm registerWebBookChapterForm) {
// if (writerRepository.existsById(writerId) && webBookRepository.existsById(webBookId)) {
// return webBookChapterRepository.save(
// WebBookChapter.builder()
// .name(registerWebBookChapterForm.getName())
// .detail(registerWebBookChapterForm.getDetail())
// .createdAt(LocalDateTime.now())
// .price(registerWebBookChapterForm.getPrice())
// .build())
// .getWebBookChapterId();
// } else {
// return null;
// }
// }
}

View File

@@ -0,0 +1,24 @@
package com.webbookdemo.controller;
import com.webbookdemo.model.form.WebBookRegisterForm;
import com.webbookdemo.service.WebBookService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("")
@RequiredArgsConstructor
public class WebBookController {
private final WebBookService webBookService;
@PostMapping
public ResponseEntity<Long> addWebBook(@RequestBody WebBookRegisterForm webBookRegisterForm) {
return ResponseEntity.ok().body(webBookService.addWebBook(webBookRegisterForm));
}
}

View File

@@ -0,0 +1,23 @@
package com.webbookdemo.model.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
@Setter
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
public class WebBookRegisterForm {
private Long writerId;
@ApiModelProperty(value = "웹소설 제목", example = "MSA 실습")
private String name;
@ApiModelProperty(value = "웹소설 설명", example = "Monolithic 에서 MSA 로 실습을 해 봅시다.")
private String description;
}

View File

@@ -0,0 +1,28 @@
package com.webbookdemo.service;
import com.webbookdemo.model.entity.WebBook;
import com.webbookdemo.model.entity.repository.WebBookRepository;
import com.webbookdemo.model.form.WebBookRegisterForm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
@RequiredArgsConstructor
public class WebBookService {
private final WebBookRepository webBookRepository;
public Long addWebBook(WebBookRegisterForm webBookRegisterForm) {
return webBookRepository.save(
WebBook.builder()
.writerId(webBookRegisterForm.getWriterId())
.name(webBookRegisterForm.getName())
.description(webBookRegisterForm.getDescription())
.createdAt(LocalDateTime.now())
.build()
).getWebBookId();
}
}