From c4cb9625786bbb34b793bab3b87fee9474796b22 Mon Sep 17 00:00:00 2001 From: Artur Kmieckowiak Date: Sat, 11 Jan 2020 14:32:41 +0100 Subject: [PATCH] Added book controller --- .../study/bookapi/api/BookController.java | 12 ++++++++++ .../bookapi/repository/BookRepository.java | 2 +- .../repository/BookRepositoryCustom.java | 9 ++++++++ .../BookRepositoryCustomImplementation.java | 23 +++++++++++++++++++ .../study/bookapi/service/BookService.java | 4 ++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustom.java create mode 100644 src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustomImplementation.java diff --git a/src/main/java/com/fnecan/study/bookapi/api/BookController.java b/src/main/java/com/fnecan/study/bookapi/api/BookController.java index 20cc261..3fdf5ad 100644 --- a/src/main/java/com/fnecan/study/bookapi/api/BookController.java +++ b/src/main/java/com/fnecan/study/bookapi/api/BookController.java @@ -3,6 +3,7 @@ package com.fnecan.study.bookapi.api; import com.fnecan.study.bookapi.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; @@ -32,4 +33,15 @@ public class BookController { bookService.getBookDetails(userId, bookId) ); } + + @DeleteMapping("/{bookId}") + public ResponseEntity removeBook( + @RequestHeader("userId") String userId, + @PathVariable("bookId") String bookId + ){ + return ResponseEntity.ok( + bookService.removeBook(userId, bookId) + ); + } + } diff --git a/src/main/java/com/fnecan/study/bookapi/repository/BookRepository.java b/src/main/java/com/fnecan/study/bookapi/repository/BookRepository.java index 3859c7c..88b56b5 100644 --- a/src/main/java/com/fnecan/study/bookapi/repository/BookRepository.java +++ b/src/main/java/com/fnecan/study/bookapi/repository/BookRepository.java @@ -6,7 +6,7 @@ import org.springframework.data.mongodb.repository.MongoRepository; import java.util.List; import java.util.Optional; -public interface BookRepository extends MongoRepository { +public interface BookRepository extends MongoRepository, BookRepositoryCustom { List findByUserId(String userId); Optional findByUserIdAndId(String userId, String bookId); } diff --git a/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustom.java b/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustom.java new file mode 100644 index 0000000..98a306d --- /dev/null +++ b/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustom.java @@ -0,0 +1,9 @@ +package com.fnecan.study.bookapi.repository; + +import com.fnecan.study.bookapi.model.BookDocument; + +import java.util.Optional; + +public interface BookRepositoryCustom { + Optional removeBook(String userId, String bookId); +} diff --git a/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustomImplementation.java b/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustomImplementation.java new file mode 100644 index 0000000..b2e944d --- /dev/null +++ b/src/main/java/com/fnecan/study/bookapi/repository/BookRepositoryCustomImplementation.java @@ -0,0 +1,23 @@ +package com.fnecan.study.bookapi.repository; + +import com.fnecan.study.bookapi.model.BookDocument; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.Optional; + +public class BookRepositoryCustomImplementation implements BookRepositoryCustom { + + @Autowired + MongoTemplate mongoTemplate; + + @Override + public Optional removeBook(String userId, String bookId) { + return Optional.ofNullable(mongoTemplate.findAndRemove( + Query.query( + Criteria.where("userId").is(userId).and("id").is(bookId) + ), BookDocument.class)); + } +} diff --git a/src/main/java/com/fnecan/study/bookapi/service/BookService.java b/src/main/java/com/fnecan/study/bookapi/service/BookService.java index 14be183..bc0606d 100644 --- a/src/main/java/com/fnecan/study/bookapi/service/BookService.java +++ b/src/main/java/com/fnecan/study/bookapi/service/BookService.java @@ -21,4 +21,8 @@ public class BookService { public Optional getBookDetails(String userId, String bookId) { return bookRepository.findByUserIdAndId(userId, bookId); } + + public Optional removeBook(String userId, String bookId) { + return bookRepository.removeBook(userId, bookId); + } }