diff --git a/docker-compose.yml b/docker-compose.yml index cbe5eb7..cb5bfc0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,10 @@ version: '3.8' services: + rabbitmq: + image: rabbitmq:management + ports: + - "5672:5672" + - "15672:15672" booking-service: build: context: . diff --git a/pom.xml b/pom.xml index 830b8eb..be1f62d 100644 --- a/pom.xml +++ b/pom.xml @@ -1,21 +1,26 @@ - + 4.0.0 + org.springframework.boot spring-boot-starter-parent 3.3.5 - + + ie.atu BookingService 0.0.1-SNAPSHOT BookingService - BookingService + Booking Service for managing bookings + 17 2023.0.3 + @@ -60,6 +65,12 @@ runtime + + + org.springframework.boot + spring-boot-starter-amqp + + org.springframework.boot @@ -79,6 +90,7 @@ true + @@ -90,6 +102,7 @@ + diff --git a/src/main/java/ie/atu/bookingservice/BookingDetails.java b/src/main/java/ie/atu/bookingservice/BookingDetails.java index d987d6e..924557d 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 + // Getters and setters public String getId() { return id; } @@ -64,16 +66,6 @@ public void setBookingDate(Date bookingDate) { this.bookingDate = bookingDate; } - public void setBookedBy(String username) { - } - - public void setBooked(boolean b) { - } - - public boolean isBooked() { - return false; - } - public String getToken() { return token; } @@ -81,4 +73,12 @@ public String getToken() { public void setToken(String token) { this.token = token; } + + public double getAmount() { // Add getter + return amount; + } + + public void setAmount(double amount) { // Add setter + this.amount = amount; + } } diff --git a/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java b/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java new file mode 100644 index 0000000..718c416 --- /dev/null +++ b/src/main/java/ie/atu/bookingservice/BookingDetailsDTO.java @@ -0,0 +1,23 @@ +package ie.atu.bookingservice; // Use dto if moved into a dto package + +public class BookingDetailsDTO { + private String id; + private double amount; + + // Getters and setters + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } +} diff --git a/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java b/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java new file mode 100644 index 0000000..a094533 --- /dev/null +++ b/src/main/java/ie/atu/bookingservice/BookingEventPublisher.java @@ -0,0 +1,30 @@ +package ie.atu.bookingservice; + +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +@Service +public class BookingEventPublisher { + + private final RabbitTemplate rabbitTemplate; + + @Value("${rabbitmq.exchange}") + private String exchange; + + @Value("${rabbitmq.routingkey}") + private String routingKey; + + public BookingEventPublisher(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + public void publishBookingCreatedEvent(BookingDetails bookingDetails) { + BookingDetailsDTO dto = new BookingDetailsDTO(); + dto.setId(bookingDetails.getId()); + dto.setAmount(bookingDetails.getAmount()); // Include amount + + rabbitTemplate.convertAndSend(exchange, routingKey, dto); + } + +} diff --git a/src/main/java/ie/atu/bookingservice/BookingService.java b/src/main/java/ie/atu/bookingservice/BookingService.java index 585f698..4e81b15 100644 --- a/src/main/java/ie/atu/bookingservice/BookingService.java +++ b/src/main/java/ie/atu/bookingservice/BookingService.java @@ -8,6 +8,7 @@ @Service public class BookingService { + private final BookingRepository bookingRepository; @Autowired @@ -16,50 +17,41 @@ public BookingService(BookingRepository bookingRepository) { } public BookingDetails createBooking(BookingDetails bookingDetails) { - bookingDetails.setStatus("AVAILABLE"); + bookingDetails.setStatus("AVAILABLE"); // Default status return bookingRepository.save(bookingDetails); } - public Optional getBookingById(String id) { - return bookingRepository.findById(id); - } - - public List getByBookingUserId(String userId) { - return bookingRepository.findByUserId(userId); + public List getAllBookings() { + return bookingRepository.findAll(); } public BookingDetails updateBooking(String id, BookingDetails updatedBooking) { - if (updatedBooking != null && bookingRepository.existsById(id)) { - updatedBooking.setId(id); - return bookingRepository.save(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 void deleteBooking(String id) { - bookingRepository.deleteById(id); - } - - public List getAllBookings() { - return bookingRepository.findAll(); - } - - public List getAvailableBookings() { - return bookingRepository.findByStatus("AVAILABLE"); - } public boolean confirmBooking(String id) { Optional bookingOptional = bookingRepository.findById(id); if (bookingOptional.isPresent()) { BookingDetails booking = bookingOptional.get(); - - // Check if the status is "AVAILABLE" if ("AVAILABLE".equals(booking.getStatus())) { - // If AVAILABLE, update status to "BOOKED" - booking.setStatus("BOOKED"); - bookingRepository.save(booking); // Save the updated booking + booking.setStatus("CONFIRMED"); + bookingRepository.save(booking); return true; } } - return false; // Return false if the booking is not available or doesn't exist + return false; + } + + public void deleteBooking(String id) { + bookingRepository.deleteById(id); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 058ea84..f533da4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,3 +4,10 @@ spring.data.mongodb.uri=mongodb://localhost:27017/bookingdb spring.data.mongodb.database=bookingdb server.port=8082 +spring.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest + +rabbitmq.exchange=booking.exchange +rabbitmq.routingkey=booking.created