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