From 277fd957b73086fc9ef71abf04e3bc6aa4eb164b Mon Sep 17 00:00:00 2001 From: trokhim03 Date: Mon, 10 Mar 2025 10:20:39 +0200 Subject: [PATCH 1/2] added docker --- .env | 8 ++ .gitignore | 1 + Dockerfile | 14 +++ docker-compose.yml | 39 ++++++++ pom.xml | 92 ++----------------- .../bookshop/controller/OrderController.java | 4 +- .../bookshop/service/order/OrderService.java | 3 +- .../service/order/OrderServiceImpl.java | 15 ++- 8 files changed, 81 insertions(+), 95 deletions(-) create mode 100644 .env create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.env b/.env new file mode 100644 index 0000000..4d6533b --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +MYSQLDB_ROOT_PASSWORD=rootpassword +MYSQLDB_DATABASE=book_shop +MYSQLDB_USER=bookshop_user +MYSQLDB_PASSWORD=QWERTY123 +MYSQLDB_LOCAL_PORT=5434 +SPRING_LOCAL_PORT=8088 +SPRING_DOCKER_PORT=8080 +DEBUG_PORT=5005 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()); From 5cd35fcbde66d706f3109dce714d67f6e7d08b94 Mon Sep 17 00:00:00 2001 From: trokhim03 Date: Mon, 10 Mar 2025 11:42:04 +0200 Subject: [PATCH 2/2] Removed .env from the repository --- .env | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 4d6533b..0000000 --- a/.env +++ /dev/null @@ -1,8 +0,0 @@ -MYSQLDB_ROOT_PASSWORD=rootpassword -MYSQLDB_DATABASE=book_shop -MYSQLDB_USER=bookshop_user -MYSQLDB_PASSWORD=QWERTY123 -MYSQLDB_LOCAL_PORT=5434 -SPRING_LOCAL_PORT=8088 -SPRING_DOCKER_PORT=8080 -DEBUG_PORT=5005