BookingServiceImpl.java
package com.aleprimo.Booking_System_App.service.serviceImpl;
import com.aleprimo.Booking_System_App.entity.Booking;
import com.aleprimo.Booking_System_App.entity.enums.BookingStatus;
import com.aleprimo.Booking_System_App.exception.ResourceNotFoundException;
import com.aleprimo.Booking_System_App.persistence.BookingDAO;
import com.aleprimo.Booking_System_App.service.BookingService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class BookingServiceImpl implements BookingService {
private final BookingDAO bookingDAO;
@Override
public Booking createBooking(Booking booking) {
return bookingDAO.save(booking);
}
@Override
public Booking updateBooking(Long id, Booking booking) {
Booking booking1 = bookingDAO.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Reserva no encontrada"));
booking1.setCustomer(booking.getCustomer());
booking1.setStatus(booking.getStatus());
booking1.setBookingDateTime(booking.getBookingDateTime());
booking1.setOffering(booking.getOffering());
return bookingDAO.save(booking1);
}
@Override
public Booking updateBookingStatus(Long id, BookingStatus status) {
Booking booking = bookingDAO.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Reserva no encontrada"));
booking.setStatus(status);
return bookingDAO.save(booking);
}
@Override
public void deleteBooking(Long id) {
bookingDAO.deleteById(id);
}
@Override
public Optional<Booking> getBookingById(Long id) {
return bookingDAO.findById(id);
}
@Override
public Page<Booking> getAllBookings(Pageable pageable) {
return bookingDAO.findAll(pageable);
}
@Override
public Page<Booking> getBookingsByCustomerId(Long customerId, Pageable pageable) {
return bookingDAO.findByCustomerId(customerId, pageable);
}
@Override
public Page<Booking> getBookingsByOfferingId(Long offeringId, Pageable pageable) {
return bookingDAO.findByOfferingId(offeringId, pageable);
}
@Override
public Page<Booking> getBookingsByStatus(BookingStatus status, Pageable pageable) {
return bookingDAO.findByStatus(status, pageable);
}
@Override
public Page<Booking> getBookingsBetween(LocalDateTime start, LocalDateTime end, Pageable pageable) {
return bookingDAO.findByBookingDateTimeBetween(start, end, pageable);
}
}