diff --git a/src/main/java/com/mindway/server/v2/domain/order/entity/BookType.java b/src/main/java/com/mindway/server/v2/domain/order/entity/BookType.java new file mode 100644 index 0000000..b1b1ec0 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/entity/BookType.java @@ -0,0 +1,6 @@ +package com.mindway.server.v2.domain.order.entity; + +public enum BookType { + NOVEL, + ESSAY +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/entity/Orders.java b/src/main/java/com/mindway/server/v2/domain/order/entity/Orders.java index 38fcd76..5a6eba1 100644 --- a/src/main/java/com/mindway/server/v2/domain/order/entity/Orders.java +++ b/src/main/java/com/mindway/server/v2/domain/order/entity/Orders.java @@ -24,6 +24,8 @@ public class Orders { private String bookURL; + private BookType bookType; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; diff --git a/src/main/java/com/mindway/server/v2/domain/order/presentation/OrdersController.java b/src/main/java/com/mindway/server/v2/domain/order/presentation/OrdersController.java new file mode 100644 index 0000000..4340532 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/presentation/OrdersController.java @@ -0,0 +1,25 @@ +package com.mindway.server.v2.domain.order.presentation; + +import com.mindway.server.v2.domain.order.entity.BookType; +import com.mindway.server.v2.domain.order.presentation.dto.request.OrderRequest; +import com.mindway.server.v2.domain.order.service.BookRequestService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v2/order") +public class OrdersController { + private final BookRequestService bookRequestService; + + @PostMapping() + public ResponseEntity<Void> bookRequest + (@RequestParam BookType type, @RequestBody @Valid OrderRequest bookRequest) { + bookRequestService.execute(type, bookRequest); + return ResponseEntity.status(HttpStatus.CREATED).build(); + } + +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/presentation/dto/request/OrderRequest.java b/src/main/java/com/mindway/server/v2/domain/order/presentation/dto/request/OrderRequest.java new file mode 100644 index 0000000..231aa72 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/presentation/dto/request/OrderRequest.java @@ -0,0 +1,12 @@ +package com.mindway.server.v2.domain.order.presentation.dto.request; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class OrderRequest { + private String title; + private String author; + private String book_url; +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/service/BookRequestService.java b/src/main/java/com/mindway/server/v2/domain/order/service/BookRequestService.java new file mode 100644 index 0000000..f7d7439 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/service/BookRequestService.java @@ -0,0 +1,8 @@ +package com.mindway.server.v2.domain.order.service; + +import com.mindway.server.v2.domain.order.entity.BookType; +import com.mindway.server.v2.domain.order.presentation.dto.request.OrderRequest; + +public interface BookRequestService { + void execute(BookType bookType, OrderRequest bookRequest); +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/service/impl/BookRequestServiceImpl.java b/src/main/java/com/mindway/server/v2/domain/order/service/impl/BookRequestServiceImpl.java new file mode 100644 index 0000000..fd7c242 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/service/impl/BookRequestServiceImpl.java @@ -0,0 +1,31 @@ +package com.mindway.server.v2.domain.order.service.impl; + +import com.mindway.server.v2.domain.order.entity.BookType; +import com.mindway.server.v2.domain.order.entity.Orders; +import com.mindway.server.v2.domain.order.presentation.dto.request.OrderRequest; +import com.mindway.server.v2.domain.order.repository.OrdersRepository; +import com.mindway.server.v2.domain.order.service.BookRequestService; +import com.mindway.server.v2.domain.order.util.OrdersConverter; +import com.mindway.server.v2.domain.user.entity.User; +import com.mindway.server.v2.domain.user.util.UserUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(rollbackFor = {Exception.class}) +public class BookRequestServiceImpl implements BookRequestService { + + private final UserUtil userUtil; + private final OrdersRepository ordersRepository; + private final OrdersConverter ordersConverter; + + @Override + public void execute(BookType bookType, OrderRequest bookRequest) { + User user = userUtil.getCurrentUser(); + + Orders order = ordersConverter.toEntity(bookRequest, user, bookType); + ordersRepository.save(order); + } +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/util/OrdersConverter.java b/src/main/java/com/mindway/server/v2/domain/order/util/OrdersConverter.java new file mode 100644 index 0000000..e6e9f2f --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/util/OrdersConverter.java @@ -0,0 +1,10 @@ +package com.mindway.server.v2.domain.order.util; + +import com.mindway.server.v2.domain.order.entity.BookType; +import com.mindway.server.v2.domain.order.entity.Orders; +import com.mindway.server.v2.domain.order.presentation.dto.request.OrderRequest; +import com.mindway.server.v2.domain.user.entity.User; + +public interface OrdersConverter { + Orders toEntity (OrderRequest bookRequest, User user, BookType bookType); +} diff --git a/src/main/java/com/mindway/server/v2/domain/order/util/impl/OrdersConverterImpl.java b/src/main/java/com/mindway/server/v2/domain/order/util/impl/OrdersConverterImpl.java new file mode 100644 index 0000000..434ad74 --- /dev/null +++ b/src/main/java/com/mindway/server/v2/domain/order/util/impl/OrdersConverterImpl.java @@ -0,0 +1,22 @@ +package com.mindway.server.v2.domain.order.util.impl; + +import com.mindway.server.v2.domain.order.entity.BookType; +import com.mindway.server.v2.domain.order.entity.Orders; +import com.mindway.server.v2.domain.order.presentation.dto.request.OrderRequest; +import com.mindway.server.v2.domain.order.util.OrdersConverter; +import com.mindway.server.v2.domain.user.entity.User; +import org.springframework.stereotype.Component; + +@Component +public class OrdersConverterImpl implements OrdersConverter { + @Override + public Orders toEntity(OrderRequest bookRequest, User user, BookType bookType) { + return Orders.builder() + .title(bookRequest.getTitle()) + .author(bookRequest.getAuthor()) + .bookURL(bookRequest.getBook_url()) + .bookType(bookType) + .user(user) + .build(); + } +} diff --git a/src/main/java/com/mindway/server/v2/global/security/config/SecurityConfig.java b/src/main/java/com/mindway/server/v2/global/security/config/SecurityConfig.java index 3d984e1..ea1d3c7 100644 --- a/src/main/java/com/mindway/server/v2/global/security/config/SecurityConfig.java +++ b/src/main/java/com/mindway/server/v2/global/security/config/SecurityConfig.java @@ -53,6 +53,9 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // user .requestMatchers(HttpMethod.GET, "/api/v2/my").authenticated() + // orders + .requestMatchers(HttpMethod.POST, "/api/v2/order").authenticated() + .anyRequest().authenticated() )