From 8b8bc9a966d89d9abc4ebf595a88d6d15a4e1521 Mon Sep 17 00:00:00 2001 From: Michelle Date: Fri, 17 Apr 2026 08:57:54 +0800 Subject: [PATCH 1/3] mich changes --- src/main/java/com/libraryman_api/book/BookController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/libraryman_api/book/BookController.java b/src/main/java/com/libraryman_api/book/BookController.java index 803e0e9..7924175 100644 --- a/src/main/java/com/libraryman_api/book/BookController.java +++ b/src/main/java/com/libraryman_api/book/BookController.java @@ -17,9 +17,10 @@ * This controller provides endpoints for performing CRUD operations on books, * including retrieving all books, getting a book by its ID, adding a new book, * updating an existing book, and deleting a book. + * * Version: 1.1 */ @RestController -@RequestMapping("/api") +@RequestMapping("/api/v1/books") //Versioning API path -> provide more context public class BookController { @Autowired @@ -80,7 +81,8 @@ public BookDto addBook(@Valid @RequestBody BookDto bookDto) { /** * Updates an existing book in the library. - * + * This operation is restricted to LIBRARIAN and ADMIN roles. + * * @param id the ID of the book to update. * @param bookDtoDetails the {@link Book} object containing the updated book details. * @return the updated {@link Book} object. @@ -93,6 +95,7 @@ public BookDto updateBook(@PathVariable int id, @Valid @RequestBody BookDto book /** * Deletes a book from the library by its ID. + * Provides confirmation message upon successful deletion. * * @param id the ID of the book to delete. */ @@ -100,6 +103,7 @@ public BookDto updateBook(@PathVariable int id, @Valid @RequestBody BookDto book @PreAuthorize("hasRole('LIBRARIAN') or hasRole('ADMIN')") public void deleteBook(@PathVariable int id) { bookService.deleteBook(id); + return ResponseEntity.ok("Book with ID " + id + " has been successfully deleted from the system."); } /** From fad75ce6cb7cbb10ca660c0dac0ea4d3b22b1765 Mon Sep 17 00:00:00 2001 From: Michelle Date: Fri, 17 Apr 2026 09:34:25 +0800 Subject: [PATCH 2/3] new mich changes --- pom.xml | 2 +- src/main/java/com/libraryman_api/book/BookController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6dfee89..a48b762 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,7 @@ io.jsonwebtoken jjwt-jackson - 0.12.0 + 0.11.5 runtime diff --git a/src/main/java/com/libraryman_api/book/BookController.java b/src/main/java/com/libraryman_api/book/BookController.java index 7924175..3784db3 100644 --- a/src/main/java/com/libraryman_api/book/BookController.java +++ b/src/main/java/com/libraryman_api/book/BookController.java @@ -101,7 +101,7 @@ public BookDto updateBook(@PathVariable int id, @Valid @RequestBody BookDto book */ @DeleteMapping("delete-book/{id}") @PreAuthorize("hasRole('LIBRARIAN') or hasRole('ADMIN')") - public void deleteBook(@PathVariable int id) { + public ResponseEntity deleteBook(@PathVariable int id) { bookService.deleteBook(id); return ResponseEntity.ok("Book with ID " + id + " has been successfully deleted from the system."); } From 51af78c340906cb8e5ff4ae1206719436f076792 Mon Sep 17 00:00:00 2001 From: Michelle Date: Sat, 18 Apr 2026 14:21:00 +0800 Subject: [PATCH 3/3] for deployment automation --- Dockerfile | 18 ++++++++++++++++++ docker-compose.yml | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..84c7813 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ + +FROM eclipse-temurin:21-jdk-alpine AS build +WORKDIR /app + +COPY .mvn/ .mvn +COPY mvnw pom.xml ./ +RUN ./mvnw dependency:go-offline + + +COPY src ./src +RUN ./mvnw clean package -DskipTests + + +FROM eclipse-temurin:21-jre-alpine +WORKDIR /app +COPY --from=build /app/target/*.jar app.jar +EXPOSE 8080 +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..095ba71 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,37 @@ +services: + db: + image: mysql:8.0 + container_name: libraryman-db + environment: + MYSQL_DATABASE: libraryman + MYSQL_ROOT_PASSWORD: root + ports: + - "3306:3306" + healthcheck: + test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] + timeout: 20s + retries: 10 + + api: + build: . + container_name: libraryman-api-staging + ports: + - "8080:8080" + depends_on: + db: + condition: service_healthy + environment: + - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/libraryman + - SPRING_DATASOURCE_USERNAME=root + - SPRING_DATASOURCE_PASSWORD=root + - SPRING_MAIL_HOST=localhost + - SPRING_MAIL_PORT=25 + - SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=false + - SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=false + - SPRING_MAIL_PROPERTIES_DOMAIN_NAME=libraryman.com + # DISABLE OAUTH2 FEATURES COMPLETELY + - SPRING_SECURITY_OAUTH2_CLIENT_ENABLED=false + - SPRING_SECURITY_OAUTH2_RESOURCESERVER_ENABLED=false + # PROVIDE A DUMMY REGISTRATION JUST IN CASE THE BEAN SCANNER STILL LOOKS + - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID=dummy + - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=dummy \ No newline at end of file