From 6182cdf09f56fc11a852a784371427a2b9705eea Mon Sep 17 00:00:00 2001
From: gupta-ashu01 <30566001+gupta-ashu01@users.noreply.github.com>
Date: Fri, 3 Jul 2020 17:18:39 +0530
Subject: [PATCH] gupta.aashishrules@gmail.com - Hexagonal
gupta.aashishrules@gmail.com - Hexagonal
---
bookstore/pom.xml | 23 +++++++++++
.../src/main/java/com/hexagonal/MainApp.java | 13 +++++++
.../hexagonal/controller/BookController.java | 37 ++++++++++++++++++
.../main/java/com/hexagonal/domain/Book.java | 38 +++++++++++++++++++
.../hexagonal/repository/BookRepository.java | 15 ++++++++
.../repository/BookRepositoryImpl.java | 35 +++++++++++++++++
.../com/hexagonal/service/BookService.java | 15 ++++++++
.../hexagonal/service/BookServiceImpl.java | 35 +++++++++++++++++
8 files changed, 211 insertions(+)
create mode 100644 bookstore/pom.xml
create mode 100644 bookstore/src/main/java/com/hexagonal/MainApp.java
create mode 100644 bookstore/src/main/java/com/hexagonal/controller/BookController.java
create mode 100644 bookstore/src/main/java/com/hexagonal/domain/Book.java
create mode 100644 bookstore/src/main/java/com/hexagonal/repository/BookRepository.java
create mode 100644 bookstore/src/main/java/com/hexagonal/repository/BookRepositoryImpl.java
create mode 100644 bookstore/src/main/java/com/hexagonal/service/BookService.java
create mode 100644 bookstore/src/main/java/com/hexagonal/service/BookServiceImpl.java
diff --git a/bookstore/pom.xml b/bookstore/pom.xml
new file mode 100644
index 0000000000..68286076e5
--- /dev/null
+++ b/bookstore/pom.xml
@@ -0,0 +1,23 @@
+
+ 4.0.0
+ com.hexagonal
+ bookstore
+ 0.0.1-SNAPSHOT
+
+
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.3.1.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
\ No newline at end of file
diff --git a/bookstore/src/main/java/com/hexagonal/MainApp.java b/bookstore/src/main/java/com/hexagonal/MainApp.java
new file mode 100644
index 0000000000..0d6ef861b3
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/MainApp.java
@@ -0,0 +1,13 @@
+package com.hexagonal;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+@SpringBootApplication
+public class MainApp {
+ public static void main(String[] args) {
+ SpringApplication.run(MainApp.class, args);
+ }
+
+}
\ No newline at end of file
diff --git a/bookstore/src/main/java/com/hexagonal/controller/BookController.java b/bookstore/src/main/java/com/hexagonal/controller/BookController.java
new file mode 100644
index 0000000000..7e525deaa1
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/controller/BookController.java
@@ -0,0 +1,37 @@
+package com.hexagonal.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PathVariable;
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.hexagonal.domain.Book;
+import com.hexagonal.service.BookService;
+
+@RestController
+public class BookController {
+
+ @Autowired
+ private BookService bookService;
+
+ @RequestMapping("/book/add")
+ @PostMapping(produces = { MediaType.TEXT_PLAIN_VALUE })
+ public void addBook(@RequestBody Book book) {
+ bookService.addBook(book);
+ }
+
+ public Book buyBook(@PathVariable String isbn) {
+ return bookService.buyBook(isbn);
+ }
+
+ public List listBooks() {
+ return bookService.listBooks();
+ }
+
+}
diff --git a/bookstore/src/main/java/com/hexagonal/domain/Book.java b/bookstore/src/main/java/com/hexagonal/domain/Book.java
new file mode 100644
index 0000000000..84125391cc
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/domain/Book.java
@@ -0,0 +1,38 @@
+package com.hexagonal.domain;
+
+public class Book {
+
+ private String name;
+ private String isbn;
+ private String author;
+
+ @Override
+ public String toString() {
+ return "Book [name=" + name + ", ISBN=" + isbn + ", author=" + author + "]";
+ }
+
+ public String getIsbn() {
+ return isbn;
+ }
+
+ public void setIsbn(String isbn) {
+ this.isbn = isbn;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+}
diff --git a/bookstore/src/main/java/com/hexagonal/repository/BookRepository.java b/bookstore/src/main/java/com/hexagonal/repository/BookRepository.java
new file mode 100644
index 0000000000..1e64a2d21b
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/repository/BookRepository.java
@@ -0,0 +1,15 @@
+package com.hexagonal.repository;
+
+import java.util.List;
+
+import com.hexagonal.domain.Book;
+
+public interface BookRepository {
+
+ public void add(Book book);
+
+ public Book buy(String isbn);
+
+ public List list();
+
+}
diff --git a/bookstore/src/main/java/com/hexagonal/repository/BookRepositoryImpl.java b/bookstore/src/main/java/com/hexagonal/repository/BookRepositoryImpl.java
new file mode 100644
index 0000000000..f4f99583dd
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/repository/BookRepositoryImpl.java
@@ -0,0 +1,35 @@
+package com.hexagonal.repository;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.springframework.stereotype.Repository;
+
+import com.hexagonal.domain.Book;
+
+@Repository
+public class BookRepositoryImpl implements BookRepository {
+
+ private Map bookMap = new HashMap<>();
+
+ @Override
+ public void add(Book book) {
+ bookMap.put(book.getIsbn(), book);
+ System.out.println("Book Added " + book);
+ }
+
+ @Override
+ public Book buy(String isbn) {
+ return bookMap.get(isbn);
+ }
+
+ @Override
+ public List list() {
+ return bookMap.values()
+ .stream()
+ .collect(Collectors.toList());
+ }
+
+}
diff --git a/bookstore/src/main/java/com/hexagonal/service/BookService.java b/bookstore/src/main/java/com/hexagonal/service/BookService.java
new file mode 100644
index 0000000000..cb5e1a930e
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/service/BookService.java
@@ -0,0 +1,15 @@
+package com.hexagonal.service;
+
+import java.util.List;
+
+import com.hexagonal.domain.Book;
+
+public interface BookService {
+
+ public void addBook(Book book);
+
+ public Book buyBook(String isbn);
+
+ public List listBooks();
+
+}
diff --git a/bookstore/src/main/java/com/hexagonal/service/BookServiceImpl.java b/bookstore/src/main/java/com/hexagonal/service/BookServiceImpl.java
new file mode 100644
index 0000000000..c7e660ea36
--- /dev/null
+++ b/bookstore/src/main/java/com/hexagonal/service/BookServiceImpl.java
@@ -0,0 +1,35 @@
+package com.hexagonal.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.hexagonal.domain.Book;
+import com.hexagonal.repository.BookRepository;
+
+@Service
+public class BookServiceImpl implements BookService {
+
+ @Autowired
+ private BookRepository bookRepository;
+
+ @Override
+ public void addBook(Book book) {
+ bookRepository.add(book);
+
+ }
+
+ @Override
+ public Book buyBook(String isbn) {
+
+ return bookRepository.buy(isbn);
+ }
+
+ @Override
+ public List listBooks() {
+
+ return bookRepository.list();
+ }
+
+}