From 9e52213068cdbef297df24266c2087b014270657 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 5 Dec 2025 17:09:49 +0300 Subject: [PATCH] wrong answ code repaired --- .../nto/controller/BookingController.java | 5 +++ .../nto/service/impl/BookingServiceImpl.java | 35 +++++-------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/example/nto/controller/BookingController.java b/src/main/java/com/example/nto/controller/BookingController.java index 45457a1..068fd05 100644 --- a/src/main/java/com/example/nto/controller/BookingController.java +++ b/src/main/java/com/example/nto/controller/BookingController.java @@ -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(); } } diff --git a/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java b/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java index 00daa58..f598fde 100644 --- a/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java @@ -54,12 +54,11 @@ public class BookingServiceImpl implements BookingService { public boolean isEmployeeExists(String code) { return employeeRepository.findByCode(code).isPresent(); } - public Map> getAvailablePlaces(String employeeCode) { - // 1. Получаем сотрудника (для контекста) + @Override + public Map> 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 targetDates = List.of( today, @@ -68,41 +67,28 @@ public class BookingServiceImpl implements BookingService { today.plusDays(3) ); - // 3. Получаем все места из БД List allPlaces = placeRepository.findAll(); - - // 4. Находим все бронирования на целевые даты List bookings = bookingRepository.findByDateIn(targetDates); - - // 5. Группируем бронирования по датам Map> bookingsByDate = bookings.stream() .collect(Collectors.groupingBy(Booking::getDate)); - - // 6. Формируем итоговый ответ - Map> result = new HashMap<>(); + Map> result = new LinkedHashMap<>(); // Используем LinkedHashMap для сохранения порядка for (LocalDate date : targetDates) { - String dateKey = date.toString(); // Формат: "yyyy-MM-dd" - - // Берём бронирования на эту дату + String dateKey = date.toString(); List dayBookings = bookingsByDate.getOrDefault(date, List.of()); - // Собираем ID занятых мест Set occupiedPlaceIds = dayBookings.stream() .map(booking -> booking.getPlace().getId()) .collect(Collectors.toSet()); - - // Фильтруем свободные места - List available = allPlaces.stream() + List 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 employeeBookingsOnDate = bookingRepository.findByDateAndEmployee_Code(date, employeeCode); if (!employeeBookingsOnDate.isEmpty()) { throw new BookingConflictException("Employee already has a booking on " + date); } - } + } */ }