wrong answ code repaired
This commit is contained in:
@@ -58,15 +58,20 @@ public class BookingController {
|
||||
) {
|
||||
try {
|
||||
Booking booking = bookingService.createBooking(code, request.getDate(), request.getPlaceId());
|
||||
System.out.println("OK");
|
||||
return ResponseEntity.status(HttpStatus.CREATED).build();
|
||||
|
||||
} catch (EmployeeNotFoundException e) {
|
||||
System.out.println("NOT");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
|
||||
} catch (BookingConflictException e) {
|
||||
System.out.println("NOT1");
|
||||
return ResponseEntity.status(HttpStatus.CONFLICT).build();
|
||||
} catch (InvalidBookingException e) {
|
||||
System.out.println("NOT2");
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
|
||||
} catch (Exception e) {
|
||||
System.out.println("NOT3");
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,12 +54,11 @@ public class BookingServiceImpl implements BookingService {
|
||||
public boolean isEmployeeExists(String code) {
|
||||
return employeeRepository.findByCode(code).isPresent();
|
||||
}
|
||||
public Map<String, List<AvailablePlaceDto>> getAvailablePlaces(String employeeCode) {
|
||||
// 1. Получаем сотрудника (для контекста)
|
||||
@Override
|
||||
public Map<String, List<Booking.AvailablePlaceDto>> getAvailablePlaces(String employeeCode) {
|
||||
Employee employee = employeeRepository.findByCode(employeeCode)
|
||||
.orElseThrow(() -> new RuntimeException("Employee not found"));
|
||||
.orElseThrow(() -> new EmployeeNotFoundException("Unauthorized"));
|
||||
|
||||
// 2. Определяем диапазон дат: сегодня + 3 дня
|
||||
LocalDate today = LocalDate.now();
|
||||
List<LocalDate> targetDates = List.of(
|
||||
today,
|
||||
@@ -68,41 +67,28 @@ public class BookingServiceImpl implements BookingService {
|
||||
today.plusDays(3)
|
||||
);
|
||||
|
||||
// 3. Получаем все места из БД
|
||||
List<Place> allPlaces = placeRepository.findAll();
|
||||
|
||||
// 4. Находим все бронирования на целевые даты
|
||||
List<Booking> bookings = bookingRepository.findByDateIn(targetDates);
|
||||
|
||||
// 5. Группируем бронирования по датам
|
||||
Map<LocalDate, List<Booking>> bookingsByDate = bookings.stream()
|
||||
.collect(Collectors.groupingBy(Booking::getDate));
|
||||
|
||||
// 6. Формируем итоговый ответ
|
||||
Map<String, List<AvailablePlaceDto>> result = new HashMap<>();
|
||||
Map<String, List<Booking.AvailablePlaceDto>> result = new LinkedHashMap<>(); // Используем LinkedHashMap для сохранения порядка
|
||||
|
||||
for (LocalDate date : targetDates) {
|
||||
String dateKey = date.toString(); // Формат: "yyyy-MM-dd"
|
||||
|
||||
// Берём бронирования на эту дату
|
||||
String dateKey = date.toString();
|
||||
List<Booking> dayBookings = bookingsByDate.getOrDefault(date, List.of());
|
||||
|
||||
// Собираем ID занятых мест
|
||||
Set<Long> occupiedPlaceIds = dayBookings.stream()
|
||||
.map(booking -> booking.getPlace().getId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// Фильтруем свободные места
|
||||
List<AvailablePlaceDto> available = allPlaces.stream()
|
||||
List<Booking.AvailablePlaceDto> available = allPlaces.stream()
|
||||
.filter(place -> !occupiedPlaceIds.contains(place.getId()))
|
||||
.map(place -> {
|
||||
AvailablePlaceDto dto = new AvailablePlaceDto();
|
||||
Booking.AvailablePlaceDto dto = new Booking.AvailablePlaceDto();
|
||||
dto.setId(place.getId());
|
||||
dto.setPlace(place.getPlace());
|
||||
return dto;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
result.put(dateKey, available);
|
||||
}
|
||||
|
||||
@@ -125,10 +111,7 @@ public class BookingServiceImpl implements BookingService {
|
||||
// 4. Проверяем, не занято ли место (409 если занято)
|
||||
checkPlaceAvailability(date, placeId);
|
||||
|
||||
// 5. Проверяем, нет ли уже брони у сотрудника на эту дату (409 если есть)
|
||||
checkEmployeeBookingConflict(employeeCode, date);
|
||||
|
||||
// 6. Создаем и сохраняем бронирование
|
||||
Booking booking = Booking.builder()
|
||||
.date(date)
|
||||
.place(place)
|
||||
@@ -162,12 +145,12 @@ public class BookingServiceImpl implements BookingService {
|
||||
}
|
||||
}
|
||||
|
||||
private void checkEmployeeBookingConflict(String employeeCode, LocalDate date) {
|
||||
/* private void checkEmployeeBookingConflict(String employeeCode, LocalDate date) {
|
||||
List<Booking> employeeBookingsOnDate = bookingRepository.findByDateAndEmployee_Code(date, employeeCode);
|
||||
if (!employeeBookingsOnDate.isEmpty()) {
|
||||
throw new BookingConflictException("Employee already has a booking on " + date);
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user