From c357dad45f7811bde4abcc1b9539f4b24a6fb25e Mon Sep 17 00:00:00 2001 From: G00405094 Date: Wed, 8 Jan 2025 18:31:18 +0000 Subject: [PATCH] Calculation Working --- .../atu/bookingservice/BookingController.java | 13 +++-- .../ie/atu/bookingservice/BookingDetails.java | 24 +++++++-- .../atu/bookingservice/BookingDetailsDTO.java | 20 +++++++- .../bookingservice/BookingEventPublisher.java | 10 +++- .../ie/atu/bookingservice/BookingService.java | 51 ++++++++----------- .../ie/atu/bookingservice/RabbitMQConfig.java | 6 ++- 6 files changed, 82 insertions(+), 42 deletions(-) diff --git a/src/main/java/ie/atu/bookingservice/BookingController.java b/src/main/java/ie/atu/bookingservice/BookingController.java index bbcdf02..c2e7f27 100644 --- a/src/main/java/ie/atu/bookingservice/BookingController.java +++ b/src/main/java/ie/atu/bookingservice/BookingController.java @@ -5,7 +5,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Optional; @RestController @RequestMapping("/api/booking") @@ -17,21 +16,26 @@ public BookingController(BookingService bookingService) { this.bookingService = bookingService; } - // Endpoint for creating a new booking @PostMapping("/createBooking") public ResponseEntity createBooking(@RequestBody BookingDetails bookingDetails) { + // Ensure required fields are populated + if (bookingDetails.getRoomType() == null || bookingDetails.getRoomType().isEmpty()) { + bookingDetails.setRoomType("Standard"); // Default room type + } + if (bookingDetails.getNumberOfGuests() == 0) { + bookingDetails.setNumberOfGuests(1); // Default to 1 guest + } + BookingDetails createdBooking = bookingService.createBooking(bookingDetails); return ResponseEntity.ok(createdBooking); } - // Endpoint to get all bookings @GetMapping public ResponseEntity> getAllBookings() { List bookings = bookingService.getAllBookings(); return ResponseEntity.ok(bookings); } - // Endpoint for updating a booking @PutMapping("update/{id}") public ResponseEntity updateBooking(@PathVariable String id, @RequestBody BookingDetails bookingDetails) { BookingDetails updatedBooking = bookingService.updateBooking(id, bookingDetails); @@ -58,7 +62,6 @@ public ResponseEntity confirmBooking(@RequestBody BookingDetails booking } } - // Endpoint for deleting a booking @DeleteMapping("delete/{id}") public ResponseEntity deleteBooking(@PathVariable String id) { bookingService.deleteBooking(id); diff --git a/src/main/java/ie/atu/bookingservice/BookingDetails.java b/src/main/java/ie/atu/bookingservice/BookingDetails.java index 924557d..fb72321 100644 --- a/src/main/java/ie/atu/bookingservice/BookingDetails.java +++ b/src/main/java/ie/atu/bookingservice/BookingDetails.java @@ -15,7 +15,9 @@ public class BookingDetails { private String status; private Date bookingDate; private String token = null; - private double amount; // Add this field + private double amount; + private int numberOfGuests; // New field + private String roomType; // New field // Getters and setters public String getId() { @@ -74,11 +76,27 @@ public void setToken(String token) { this.token = token; } - public double getAmount() { // Add getter + public double getAmount() { return amount; } - public void setAmount(double amount) { // Add setter + public void setAmount(double amount) { this.amount = amount; } + + public int getNumberOfGuests() { + return numberOfGuests; + } + + public void setNumberOfGuests(int numberOfGuests) { + this.numberOfGuests = numberOfGuests; + } + + public String getRoomType() { + return roomType; + } + + public void setRoomType(String roomType) { + this.roomType = roomType; + } } diff --git a/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java b/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java index 718c416..25f9351 100644 --- a/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java +++ b/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java @@ -1,8 +1,10 @@ -package ie.atu.bookingservice; // Use dto if moved into a dto package +package ie.atu.bookingservice; public class BookingDetailsDTO { private String id; private double amount; + private int numberOfGuests; // New field + private String roomType; // New field // Getters and setters public String getId() { @@ -20,4 +22,20 @@ public double getAmount() { public void setAmount(double amount) { this.amount = amount; } + + public int getNumberOfGuests() { + return numberOfGuests; + } + + public void setNumberOfGuests(int numberOfGuests) { + this.numberOfGuests = numberOfGuests; + } + + public String getRoomType() { + return roomType; + } + + public void setRoomType(String roomType) { + this.roomType = roomType; + } } diff --git a/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java b/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java index 9e6ccbf..6ec126b 100644 --- a/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java +++ b/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java @@ -1,5 +1,6 @@ package ie.atu.bookingservice; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -20,6 +21,13 @@ public BookingEventPublisher(RabbitTemplate rabbitTemplate) { } public void publishBookingCreatedEvent(BookingDetailsDTO bookingDetailsDTO) { - rabbitTemplate.convertAndSend(exchange, routingKey, bookingDetailsDTO); + try { + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(bookingDetailsDTO); + System.out.println("Publishing JSON payload: " + json); + rabbitTemplate.convertAndSend(exchange, routingKey, bookingDetailsDTO); + } catch (Exception e) { + System.err.println("Failed to serialize message: " + e.getMessage()); + } } } diff --git a/src/main/java/ie/atu/bookingservice/BookingService.java b/src/main/java/ie/atu/bookingservice/BookingService.java index 5ff708d..8bca3b7 100644 --- a/src/main/java/ie/atu/bookingservice/BookingService.java +++ b/src/main/java/ie/atu/bookingservice/BookingService.java @@ -1,10 +1,8 @@ package ie.atu.bookingservice; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; @Service public class BookingService { @@ -12,21 +10,23 @@ public class BookingService { private final BookingRepository bookingRepository; private final BookingEventPublisher bookingEventPublisher; - @Autowired public BookingService(BookingRepository bookingRepository, BookingEventPublisher bookingEventPublisher) { this.bookingRepository = bookingRepository; this.bookingEventPublisher = bookingEventPublisher; } public BookingDetails createBooking(BookingDetails bookingDetails) { - bookingDetails.setStatus("AVAILABLE"); // Default status + // Save booking to database BookingDetails savedBooking = bookingRepository.save(bookingDetails); - // Publish event to RabbitMQ - BookingDetailsDTO dto = new BookingDetailsDTO(); - dto.setId(savedBooking.getId()); - dto.setAmount(savedBooking.getAmount()); - bookingEventPublisher.publishBookingCreatedEvent(dto); // Pass the DTO + // Publish event + BookingDetailsDTO bookingDetailsDTO = new BookingDetailsDTO(); + bookingDetailsDTO.setId(savedBooking.getId()); + bookingDetailsDTO.setAmount(savedBooking.getAmount()); + bookingDetailsDTO.setNumberOfGuests(savedBooking.getNumberOfGuests()); + bookingDetailsDTO.setRoomType(savedBooking.getRoomType()); + + bookingEventPublisher.publishBookingCreatedEvent(bookingDetailsDTO); return savedBooking; } @@ -35,30 +35,21 @@ public List getAllBookings() { return bookingRepository.findAll(); } - public BookingDetails updateBooking(String id, BookingDetails updatedBooking) { - Optional existingBooking = bookingRepository.findById(id); - if (existingBooking.isPresent()) { - BookingDetails booking = existingBooking.get(); - booking.setServiceId(updatedBooking.getServiceId()); - booking.setServiceType(updatedBooking.getServiceType()); - booking.setStatus(updatedBooking.getStatus()); - booking.setAmount(updatedBooking.getAmount()); - return bookingRepository.save(booking); - } - return null; + public BookingDetails updateBooking(String id, BookingDetails bookingDetails) { + return bookingRepository.findById(id).map(existingBooking -> { + existingBooking.setRoomType(bookingDetails.getRoomType()); + existingBooking.setNumberOfGuests(bookingDetails.getNumberOfGuests()); + existingBooking.setAmount(bookingDetails.getAmount()); + return bookingRepository.save(existingBooking); + }).orElse(null); } public boolean confirmBooking(String id) { - Optional bookingOptional = bookingRepository.findById(id); - if (bookingOptional.isPresent()) { - BookingDetails booking = bookingOptional.get(); - if ("AVAILABLE".equals(booking.getStatus())) { - booking.setStatus("CONFIRMED"); - bookingRepository.save(booking); - return true; - } - } - return false; + return bookingRepository.findById(id).map(existingBooking -> { + existingBooking.setStatus("Confirmed"); + bookingRepository.save(existingBooking); + return true; + }).orElse(false); } public void deleteBooking(String id) { diff --git a/src/main/java/ie/atu/bookingservice/RabbitMQConfig.java b/src/main/java/ie/atu/bookingservice/RabbitMQConfig.java index dc6a8d8..33a8cd9 100644 --- a/src/main/java/ie/atu/bookingservice/RabbitMQConfig.java +++ b/src/main/java/ie/atu/bookingservice/RabbitMQConfig.java @@ -15,9 +15,11 @@ public Jackson2JsonMessageConverter jackson2JsonMessageConverter() { } @Bean - public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) { - RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + public org.springframework.amqp.rabbit.core.RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, + Jackson2JsonMessageConverter jackson2JsonMessageConverter) { + org.springframework.amqp.rabbit.core.RabbitTemplate rabbitTemplate = new org.springframework.amqp.rabbit.core.RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter); return rabbitTemplate; } } +