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