diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java new file mode 100644 index 0000000..bbea5db --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java @@ -0,0 +1,31 @@ +package _11.asktpk.artisanconnectbackend.controller; + +import _11.asktpk.artisanconnectbackend.dto.ClientDTO; +import _11.asktpk.artisanconnectbackend.dto.OrderDTO; +import _11.asktpk.artisanconnectbackend.dto.OrderStatusDTO; +import _11.asktpk.artisanconnectbackend.service.OrderService; +import _11.asktpk.artisanconnectbackend.utils.Enums; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/v1/orders") +public class OrderController { + + private final OrderService orderService; + + public OrderController(OrderService orderService) { + this.orderService = orderService; + } + + @PostMapping("/add") + public ResponseEntity addClient(@RequestBody OrderDTO orderDTO) { + return new ResponseEntity<>(orderService.addOrder(orderDTO), HttpStatus.CREATED); + } + + @PutMapping("/changeStatus") + public ResponseEntity changeStatus(@RequestBody OrderStatusDTO orderStatusDTO) { + return new ResponseEntity<>(orderService.changeOrderStatus(orderStatusDTO.getId(),orderStatusDTO.getStatus()), HttpStatus.OK); + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderDTO.java new file mode 100644 index 0000000..a5d842b --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderDTO.java @@ -0,0 +1,13 @@ +package _11.asktpk.artisanconnectbackend.dto; + +import _11.asktpk.artisanconnectbackend.utils.Enums; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderDTO { + private Long clientId; + private Long noticeId; + private Enums.OrderType orderType; +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderStatusDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderStatusDTO.java new file mode 100644 index 0000000..f07defc --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderStatusDTO.java @@ -0,0 +1,12 @@ +package _11.asktpk.artisanconnectbackend.dto; + + +import _11.asktpk.artisanconnectbackend.utils.Enums; +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class OrderStatusDTO { + public long id; + public Enums.OrderStatus status; +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Client.java b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Client.java index a8f935e..0a25d3d 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Client.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Client.java @@ -33,5 +33,5 @@ public class Client { // private List notices; @OneToMany(mappedBy = "client", cascade = CascadeType.ALL) - private List orders; + private List orders; } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Notice.java b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Notice.java index c840e51..14c4119 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Notice.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Notice.java @@ -39,7 +39,7 @@ public class Notice { private List attributesNotices; @OneToMany(mappedBy = "notice", cascade = CascadeType.ALL) - private List orders; + private List orders; @OneToMany(mappedBy = "notice", cascade = CascadeType.ALL) private List payments; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Orders.java b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Order.java similarity index 91% rename from src/main/java/_11/asktpk/artisanconnectbackend/entities/Orders.java rename to src/main/java/_11/asktpk/artisanconnectbackend/entities/Order.java index 27120df..5a87d2c 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Orders.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Order.java @@ -1,7 +1,6 @@ package _11.asktpk.artisanconnectbackend.entities; import _11.asktpk.artisanconnectbackend.utils.Enums; -import _11.asktpk.artisanconnectbackend.utils.Enums.Status; import jakarta.persistence.*; import lombok.Getter; @@ -13,7 +12,7 @@ import java.time.LocalDateTime; @Table(name = "orders") @Getter @Setter -public class Orders { +public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Payments.java b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Payments.java index a15dde9..06efb18 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/entities/Payments.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/entities/Payments.java @@ -13,7 +13,7 @@ public class Payments { @ManyToOne @JoinColumn(name = "id_order") - private Orders order; + private Order order; @ManyToOne @JoinColumn(name = "id_notice") diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java new file mode 100644 index 0000000..422ab2d --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java @@ -0,0 +1,11 @@ +package _11.asktpk.artisanconnectbackend.repository; + +import _11.asktpk.artisanconnectbackend.entities.Order; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface OrderRepository extends JpaRepository { + + +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java new file mode 100644 index 0000000..8e74861 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java @@ -0,0 +1,74 @@ +package _11.asktpk.artisanconnectbackend.service; + +import _11.asktpk.artisanconnectbackend.dto.OrderDTO; +import _11.asktpk.artisanconnectbackend.entities.Client; +import _11.asktpk.artisanconnectbackend.entities.Notice; +import _11.asktpk.artisanconnectbackend.repository.ClientRepository; +import _11.asktpk.artisanconnectbackend.repository.NoticeRepository; +import _11.asktpk.artisanconnectbackend.repository.OrderRepository; +import _11.asktpk.artisanconnectbackend.utils.Enums; +import jakarta.persistence.EntityNotFoundException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import _11.asktpk.artisanconnectbackend.entities.Order; + +import java.time.LocalDateTime; + +@Service +public class OrderService { + + private final OrderRepository orderRepository; + private final ClientRepository clientRepository; + private final NoticeRepository noticeRepository; + + @Autowired + public OrderService(OrderRepository orderRepository, ClientRepository clientRepository, NoticeRepository noticeRepository) { + this.orderRepository = orderRepository; + this.clientRepository = clientRepository; + this.noticeRepository = noticeRepository; + } + + public Order fromDTO(OrderDTO orderDTO) { + Order order = new Order(); + order.setOrderType(orderDTO.getOrderType()); + order.setStatus(Enums.OrderStatus.PENDING); + if(orderDTO.getOrderType() == Enums.OrderType.ACTIVATION){ + order.setAmount(10.00); + }else{ + order.setAmount(8.00); + } + + order.setCreatedAt(LocalDateTime.now() + ); + order.setUpdatedAt(LocalDateTime.now() + ); + + Client client = clientRepository.findById(orderDTO.getClientId()) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono klienta o ID: " + orderDTO.getClientId())); + order.setClient(client); + + Notice notice = noticeRepository.findById(orderDTO.getNoticeId()) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + orderDTO.getNoticeId())); + order.setNotice(notice); + + return order; + } + + + public Long addOrder(OrderDTO orderDTO) { + Order order = fromDTO(orderDTO); + return orderRepository.save(order).getId(); + } + + public Long changeOrderStatus(Long id, Enums.OrderStatus status) { + Order order = orderRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Nie znaleziono zamówienia o ID: " + id)); + + order.setStatus(status); + + order = orderRepository.save(order); + + return order.getId(); + + } +}