Changeset deea3c4 for src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java
- Timestamp:
- 04/28/25 14:21:17 (3 weeks ago)
- Branches:
- main
- Children:
- e15e8d9
- Parents:
- f5b256e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java
rf5b256e rdeea3c4 1 1 package com.example.rezevirajmasa.demo.service.impl; 2 2 3 import com.example.rezevirajmasa.demo.dto.ReservationDTO; 4 import com.example.rezevirajmasa.demo.dto.RestaurantDTO; 3 5 import com.example.rezevirajmasa.demo.dto.UserDto; 4 6 import com.example.rezevirajmasa.demo.mappers.UserMapper; … … 12 14 import com.example.rezevirajmasa.demo.service.ReservationHistoryService; 13 15 import com.example.rezevirajmasa.demo.service.ReservationService; 16 import com.example.rezevirajmasa.demo.service.RestaurantService; 14 17 import com.example.rezevirajmasa.demo.service.UserService; 15 18 import org.springframework.beans.factory.annotation.Autowired; … … 31 34 @Service 32 35 public class ReservationImpl implements ReservationService { 36 33 37 @Autowired 34 38 private TableRepository tableRepository; … … 51 55 52 56 @Override 53 public void makeReservation(User user, TableEntity table, Restaurant restaurant, LocalDateTime localDateTime, LocalDateTime checkInTime, int partySize, String specialRequests) { 54 if (!table.isAvailable(checkInTime)) { 55 // Handle unavailability (throw an exception, return a specific response, etc.) 56 throw new RuntimeException("Table not available for the specified time slot"); 57 } 58 59 Reservation reservation = 60 new Reservation(user, table, restaurant, LocalDateTime.now(), partySize, specialRequests, "Reserved", checkInTime, checkInTime.plusHours(2), null); 61 62 // // Update table status or perform additional logic if needed 63 // tableRepository.save(table); 64 65 // Save the reservation 66 reservationRepository.save(reservation); 67 } 68 69 @Override 70 public Reservation makeReservationRest(Reservation reservation, User user) { 71 Optional<TableEntity> optionalTable = tableRepository.findById(reservation.getTable().getId()); 57 public Reservation makeReservationRest(ReservationDTO reservationDTO, User user) { 58 Reservation reservation = new Reservation(); 59 60 Optional<TableEntity> optionalTable = tableRepository.findById(reservationDTO.getTableNumber()); 61 72 62 if (optionalTable.isPresent()) { 73 63 TableEntity table = optionalTable.get(); 74 64 65 LocalDateTime reservationTime = reservationDTO.getReservationDateTime(); 66 LocalDateTime startTime = reservationTime.minusHours(2); 67 LocalDateTime endTime = reservationTime.plusHours(2); 68 69 boolean hasConflict = table.getReservations().stream() 70 .anyMatch(existingReservation -> { 71 LocalDateTime existingStartTime = existingReservation.getCheckInTime(); 72 LocalDateTime existingEndTime = existingReservation.getCheckOutTime(); 73 74 boolean scenario1 = existingStartTime.isBefore(startTime) && existingEndTime.isAfter(startTime); 75 76 boolean scenario2 = existingStartTime.isBefore(endTime) && existingEndTime.isAfter(startTime); 77 78 boolean scenario3 = existingStartTime.isAfter(startTime) && existingEndTime.isBefore(endTime); 79 80 boolean scenario4 = existingStartTime.isBefore(startTime) && existingEndTime.isAfter(endTime); 81 82 return scenario1 || scenario2 || scenario3 || scenario4; 83 }); 84 if (hasConflict) { 85 throw new InvalidReservationException("Unsuccessful reservation -> time slot not available"); 86 } 87 88 reservation.setTable(table); 89 reservation.setReservationDateTime(LocalDateTime.now()); 90 reservation.setSpecialRequests(reservationDTO.getSpecialRequests()); 91 reservation.setPartySize(reservationDTO.getPartySize()); 92 reservation.setStatus(reservationDTO.getStatus() != null ? reservationDTO.getStatus() : "Pending"); 93 reservation.setPaymentStatus(reservationDTO.getPaymentStatus() != null ? reservationDTO.getPaymentStatus() : "Unpaid"); 75 94 reservation.setUser(user); 76 77 LocalDateTime startTime = reservation.getCheckInTime().minusHours(2); 78 LocalDateTime endTime = reservation.getCheckInTime().plusHours(2); 79 80 table.getTimeSlots().removeIf( 81 x -> x.isAfter(startTime) && x.isBefore(endTime) 82 ); 95 reservation.setRestaurant(reservationDTO.getRestaurant()); 96 reservation.setCheckInTime(reservationTime); 83 97 reservation.setReservationDateTime(LocalDateTime.now()); 98 reservation.setCheckOutTime(reservationTime.plusHours(2)); 99 reservation.setRestaurant(reservationDTO.getRestaurant()); 100 84 101 return reservationRepository.save(reservation); 85 102 } else { 86 throw new InvalidReservationException("Unsuccessful reservation -> time slot not available"); 87 } 88 } 89 103 throw new InvalidReservationException("Invalid table number -> table not found"); 104 } 105 } 106 107 @Override 108 public Reservation updateReservation(Long reservationId, ReservationDTO reservationDTO, User user) { 109 Reservation existingReservation = findById(reservationId); 110 111 if (!existingReservation.getCheckInTime().equals(reservationDTO.getReservationDateTime())) { 112 TableEntity table = existingReservation.getTable(); 113 table.removeReservation(existingReservation); 114 115 LocalDateTime newStartTime = reservationDTO.getReservationDateTime().minusHours(2); 116 LocalDateTime newEndTime = reservationDTO.getReservationDateTime().plusHours(2); 117 boolean hasConflict = table.getReservations().stream() 118 .anyMatch(r -> r.getCheckInTime().isAfter(newStartTime) && r.getCheckInTime().isBefore(newEndTime)); 119 120 if (hasConflict) { 121 throw new InvalidReservationException("New time slot is not available."); 122 } 123 124 table.addReservation(existingReservation); 125 } 126 127 existingReservation.setCheckInTime(reservationDTO.getReservationDateTime()); 128 existingReservation.setCheckOutTime(reservationDTO.getReservationDateTime().plusHours(2)); 129 existingReservation.setReservationDateTime(LocalDateTime.now()); 130 existingReservation.setPartySize(reservationDTO.getPartySize()); 131 existingReservation.setSpecialRequests(reservationDTO.getSpecialRequests()); 132 existingReservation.setStatus(reservationDTO.getStatus() != null ? reservationDTO.getStatus() : existingReservation.getStatus()); 133 existingReservation.setPaymentStatus(reservationDTO.getPaymentStatus() != null ? reservationDTO.getPaymentStatus() : existingReservation.getPaymentStatus()); 134 135 return reservationRepository.save(existingReservation); 136 } 90 137 91 138 @Override 92 139 public List<Reservation> listAll() { 93 140 return reservationRepository.findAll(); 141 } 142 143 @Override 144 public List<Reservation> reservationsForTable(TableEntity table) { 145 return reservationRepository.findAllByTableAndCheckInTime(table, LocalDateTime.now()); 94 146 } 95 147 … … 106 158 TableEntity table = reservation.getTable(); 107 159 108 LocalDateTime from = reservation.getCheckInTime().minusHours(2); 109 LocalDateTime till = reservation.getCheckInTime().plusHours(2); 110 111 String[] hours = table.getRestaurant().getOperatingHours().split("-"); 112 LocalTime openingHourTime = LocalTime.parse(hours[0], DateTimeFormatter.ofPattern("HH:mm")); 113 LocalDateTime openingDateTime = openingHourTime.atDate(from.toLocalDate()); 114 LocalTime closingHourTime = LocalTime.of(22,45); 115 LocalDateTime closingDateTime = closingHourTime.atDate(till.toLocalDate()); 116 if(from.isBefore(openingDateTime)) { 117 from = openingDateTime; 118 } 119 if(till.isAfter(closingDateTime)) { 120 till = closingDateTime; 121 } 122 while (from.isBefore(reservation.getCheckInTime().plusHours(2))) { 123 table.addTimeSlot(from); 124 from = from.plusMinutes(15); 125 } 160 table.removeReservation(reservation); 161 126 162 reservationHistoryService.moveReservationToHistory(reservation, "Canceled", "Canceled by user"); 127 163 reservationRepository.delete(reservation); 164 128 165 return true; 129 166 } else { … … 132 169 } 133 170 134 135 171 @Override 136 172 public List<Reservation> findReservationByUser(User user) { 137 173 LocalDateTime now = LocalDateTime.now(); 138 return reservationRepository.findALlByUserAndCheckInTimeAfter(user, now); 174 return reservationRepository.findAllByUserAndCheckInTimeAfter(user, now); 175 } 176 177 @Override 178 public List<Reservation> findAllByUser(User user) { 179 return reservationRepository.findAllByUser(user); 139 180 } 140 181 … … 142 183 public List<Reservation> findReservationsByUserPast(User user) { 143 184 LocalDateTime now = LocalDateTime.now(); 144 return reservationRepository.findA LlByUserAndCheckInTimeBefore(user, now);185 return reservationRepository.findAllByUserAndCheckInTimeBefore(user, now); 145 186 } 146 187 … … 151 192 152 193 @Override 153 public List<Reservation> findReservationsToMove(LocalDateTime currentTime) { 154 return reservationRepository.findAllByCheckInTimeBefore(currentTime); 194 public void findReservationsToMove() { 195 List<Reservation> pastReservations = reservationRepository.findAllByCheckInTimeBefore(LocalDateTime.now()); 196 for(Reservation reservation : pastReservations) { 197 reservationHistoryService.moveReservationToHistory(reservation, "successful", "/"); 198 reservationRepository.delete(reservation); 199 } 155 200 } 156 201 … … 160 205 reservationRepository.delete(reservation); 161 206 } 207 208 @Override 209 public List<Reservation> findAllByRestaurant(Restaurant restaurant) { 210 return reservationRepository.findAllByRestaurantAndCheckInTimeAfter(restaurant, LocalDateTime.now()); 211 } 162 212 }
Note:
See TracChangeset
for help on using the changeset viewer.