From 09e13d89c977a7268a978e4c2fca50a665126e28 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 5 Dec 2025 21:22:54 +0300 Subject: [PATCH] final --- .../nto/service/impl/BookingServiceImpl.java | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) 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 19435bf..27b21cc 100644 --- a/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java @@ -54,11 +54,9 @@ public class BookingServiceImpl implements BookingService { public boolean isEmployeeExists(String code) { return employeeRepository.findByCode(code).isPresent(); } - @Override - public Map> getAvailablePlaces(String employeeCode) { + public Map> getAvailablePlaces(String employeeCode) { Employee employee = employeeRepository.findByCode(employeeCode) - .orElseThrow(() -> new EmployeeNotFoundException("Unauthorized")); - + .orElseThrow(() -> new RuntimeException("Employee not found")); LocalDate today = LocalDate.now(); List targetDates = List.of( today, @@ -66,24 +64,21 @@ public class BookingServiceImpl implements BookingService { today.plusDays(2), today.plusDays(3) ); - List allPlaces = placeRepository.findAll(); List bookings = bookingRepository.findByDateIn(targetDates); Map> bookingsByDate = bookings.stream() - .collect(Collectors.groupingBy(Booking::getDate, Collectors.toList())); - Map> result = new LinkedHashMap<>(); // Используем LinkedHashMap для сохранения порядка - + .collect(Collectors.groupingBy(Booking::getDate)); + Map> result = new HashMap<>(); for (LocalDate date : targetDates) { - String dateKey = date.toString(); + String dateKey = date.toString(); // Формат: "yyyy-MM-dd" List dayBookings = bookingsByDate.getOrDefault(date, List.of()); - 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 -> { - Booking.AvailablePlaceDto dto = new Booking.AvailablePlaceDto(); + AvailablePlaceDto dto = new AvailablePlaceDto(); dto.setId(place.getId()); dto.setPlace(place.getPlace()); return dto; @@ -97,21 +92,13 @@ public class BookingServiceImpl implements BookingService { @Override @Transactional public Booking createBooking(String employeeCode, LocalDate date, long placeId) { - // 1. Проверяем существование сотрудника (401 если нет) Employee employee = employeeRepository.findByCode(employeeCode) .orElseThrow(() -> new EmployeeNotFoundException("Employee with code '" + employeeCode + "' not found")); - - // 2. Проверяем существование места (400 если нет) Place place = placeRepository.findById(placeId) .orElseThrow(() -> new InvalidBookingException("Place with id " + placeId + " not found")); - - // 3. Валидация даты (400 если невалидно) validateBookingDate(date); - - // 4. Проверяем, не занято ли место (409 если занято) checkPlaceAvailability(date, placeId); - - + checkEmployeeBookingConflict(employeeCode, date); Booking booking = Booking.builder() .date(date) .place(place) @@ -145,15 +132,17 @@ 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); } - } */ + } } + +