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
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 803e0e9..3784db3 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,13 +95,15 @@ 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.
*/
@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.");
}
/**