diff --git a/.gitignore b/.gitignore
index 549e00a..e3338e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@ target/
.settings
.springBeans
.sts4-cache
+.env
### IntelliJ IDEA ###
.idea
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..7955f97
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,14 @@
+FROM openjdk:17-slim AS builder
+WORKDIR application
+ARG JAR_FILE=target/*.jar
+COPY ${JAR_FILE} application.jar
+RUN java -Djarmode=layertools -jar application.jar extract
+
+FROM openjdk:17-slim
+WORKDIR application
+COPY --from=builder application/dependencies/ ./
+COPY --from=builder application/spring-boot-loader/ ./
+COPY --from=builder application/snapshot-dependencies/ ./
+COPY --from=builder application/application/ ./
+ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]
+EXPOSE 8080
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..f76996d
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,39 @@
+version: "3.8"
+
+services:
+ mysqldb:
+ image: mysql:8
+ platform: linux/amd64
+ restart: unless-stopped
+ env_file: ./.env
+ environment:
+ MYSQL_ROOT_PASSWORD: "${MYSQLDB_ROOT_PASSWORD}"
+ MYSQL_DATABASE: "${MYSQLDB_DATABASE}"
+ MYSQL_USER: "${MYSQLDB_USER}"
+ MYSQL_PASSWORD: "${MYSQLDB_PASSWORD}"
+ ports:
+ - "${MYSQLDB_LOCAL_PORT}:3306"
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
+ interval: 30s
+ timeout: 30s
+ retries: 3
+
+ bookstore-service:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ env_file: ./.env
+ restart: on-failure
+ ports:
+ - "${SPRING_LOCAL_PORT}:${SPRING_DOCKER_PORT}"
+ - "${DEBUG_PORT}:${DEBUG_PORT}"
+ environment:
+ SPRING_DATASOURCE_URL: "jdbc:mysql://mysqldb:3306/${MYSQLDB_DATABASE}"
+ SPRING_DATASOURCE_USERNAME: "${MYSQLDB_USER}"
+ SPRING_DATASOURCE_PASSWORD: "${MYSQLDB_PASSWORD}"
+ SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT: "org.hibernate.dialect.MySQL8Dialect"
+ JAVA_TOOL_OPTIONS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
+ depends_on:
+ mysqldb:
+ condition: service_healthy
diff --git a/pom.xml b/pom.xml
index 4ff052e..30ff2e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,26 +6,13 @@
org.springframework.boot
spring-boot-starter-parent
3.3.3
-
+
mate.academy
Books
0.0.1-SNAPSHOT
Books
Books
-
-
-
-
-
-
-
-
-
-
-
-
-
17
checkstyle.xml
@@ -33,12 +20,18 @@
0.2.0
1.5.5.Final
0.12.6
+ 4.27.0
+ 1.18.32
org.springframework.boot
spring-boot-starter-data-jpa
+
+ org.springframework.boot
+ spring-boot-docker-compose
+
org.springframework.boot
spring-boot-starter-test
@@ -54,11 +47,6 @@
liquibase-core
${liquibase.version}
-
- org.liquibase
- liquibase-maven-plugin
- ${liquibase.version}
-
com.h2database
h2
@@ -67,6 +55,7 @@
org.projectlombok
lombok
+ ${lombok.version}
provided
@@ -118,6 +107,7 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.11.0
${java.version}
${java.version}
@@ -160,70 +150,6 @@
src
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${java.version}
- ${java.version}
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- org.projectlombok
- lombok-mapstruct-binding
- ${lombok.mapstruct.binding.version}
-
-
- org.mapstruct
- mapstruct-processor
- ${mapstruct.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 3.3.0
-
-
- compile
-
- check
-
-
-
-
- ${maven.checkstyle.plugin.configLocation}
- true
- true
- false
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 3.3.0
-
-
- compile
-
- check
-
-
-
-
- ${maven.checkstyle.plugin.configLocation}
- true
- true
- false
- src
-
-
diff --git a/src/main/java/mate/academy/bookshop/controller/OrderController.java b/src/main/java/mate/academy/bookshop/controller/OrderController.java
index dee84a9..f08a336 100644
--- a/src/main/java/mate/academy/bookshop/controller/OrderController.java
+++ b/src/main/java/mate/academy/bookshop/controller/OrderController.java
@@ -42,8 +42,8 @@ public List getOrders(Pageable pageable, Authentication authen
@PostMapping
public OrderResponseDto createOrder(Authentication authentication,
@RequestBody @Valid OrderRequestDto orderRequestDto) {
- Long authenticatedUserId = getAuthenticatedUserId(authentication);
- return orderService.createOrderByUserId(authenticatedUserId,
+
+ return orderService.createOrderByUser((User) authentication.getPrincipal(),
orderRequestDto);
}
diff --git a/src/main/java/mate/academy/bookshop/service/order/OrderService.java b/src/main/java/mate/academy/bookshop/service/order/OrderService.java
index 96c0fbb..8e8ae01 100644
--- a/src/main/java/mate/academy/bookshop/service/order/OrderService.java
+++ b/src/main/java/mate/academy/bookshop/service/order/OrderService.java
@@ -5,10 +5,11 @@
import mate.academy.bookshop.dto.order.OrderResponseDto;
import mate.academy.bookshop.dto.order.OrderUpdateStatusDto;
import mate.academy.bookshop.dto.orderitem.OrderItemResponseDto;
+import mate.academy.bookshop.model.User;
import org.springframework.data.domain.Pageable;
public interface OrderService {
- OrderResponseDto createOrderByUserId(Long userId, OrderRequestDto orderRequestDto);
+ OrderResponseDto createOrderByUser(User user, OrderRequestDto orderRequestDto);
List getOrderByUserId(Pageable pageable, Long userId);
diff --git a/src/main/java/mate/academy/bookshop/service/order/OrderServiceImpl.java b/src/main/java/mate/academy/bookshop/service/order/OrderServiceImpl.java
index 98839e7..006906a 100644
--- a/src/main/java/mate/academy/bookshop/service/order/OrderServiceImpl.java
+++ b/src/main/java/mate/academy/bookshop/service/order/OrderServiceImpl.java
@@ -19,10 +19,10 @@
import mate.academy.bookshop.model.Order;
import mate.academy.bookshop.model.OrderItem;
import mate.academy.bookshop.model.ShoppingCart;
+import mate.academy.bookshop.model.User;
import mate.academy.bookshop.repository.OrderItemRepository;
import mate.academy.bookshop.repository.OrderRepository;
import mate.academy.bookshop.repository.ShoppingCartRepository;
-import mate.academy.bookshop.repository.UserRepository;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -35,23 +35,20 @@ public class OrderServiceImpl implements OrderService {
private final OrderRepository orderRepository;
private final OrderItemRepository orderItemRepository;
private final ShoppingCartRepository shoppingCartRepository;
- private final UserRepository userRepository;
@Override
- public OrderResponseDto createOrderByUserId(Long userId, OrderRequestDto orderRequestDto) {
+ public OrderResponseDto createOrderByUser(User user, OrderRequestDto orderRequestDto) {
ShoppingCart shoppingCart = shoppingCartRepository
- .findByUserId(userId)
+ .findByUserId(user.getId())
.orElseThrow(() -> new EntityNotFoundException("Shopping cart not found"
- + " for user with id: " + userId
+ + " for user with id: " + user.getId()
));
if (shoppingCart.getCartItems().isEmpty()) {
throw new OrderProcessingException("Shopping cart is empty "
- + "for user id: " + userId);
+ + "for user id: " + user.getId());
}
Order order = orderMapper.toEntity(orderRequestDto);
- order.setUser(userRepository.findById(userId)
- .orElseThrow(() -> new EntityNotFoundException("User with id "
- + userId + " not found")));
+ order.setUser(user);
order.setStatus(Order.Status.PENDING);
order.setOrderDate(LocalDateTime.now());