create order and change order status

This commit is contained in:
Patryk
2025-05-20 22:25:00 +02:00
parent 65524d0f25
commit c642f6f87b
9 changed files with 145 additions and 5 deletions

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -33,5 +33,5 @@ public class Client {
// private List<Notice> notices;
@OneToMany(mappedBy = "client", cascade = CascadeType.ALL)
private List<Orders> orders;
private List<Order> orders;
}

View File

@@ -39,7 +39,7 @@ public class Notice {
private List<AttributesNotice> attributesNotices;
@OneToMany(mappedBy = "notice", cascade = CascadeType.ALL)
private List<Orders> orders;
private List<Order> orders;
@OneToMany(mappedBy = "notice", cascade = CascadeType.ALL)
private List<Payments> payments;

View File

@@ -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;

View File

@@ -13,7 +13,7 @@ public class Payments {
@ManyToOne
@JoinColumn(name = "id_order")
private Orders order;
private Order order;
@ManyToOne
@JoinColumn(name = "id_notice")

View File

@@ -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<Order, Long> {
}

View File

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