diff --git a/src/main/java/com/example/nto/controller/BookingController.java b/src/main/java/com/example/nto/controller/BookingController.java index 579606f..70c1548 100644 --- a/src/main/java/com/example/nto/controller/BookingController.java +++ b/src/main/java/com/example/nto/controller/BookingController.java @@ -38,9 +38,6 @@ public class BookingController { } } - - - @GetMapping("/info") public ResponseEntity> info(@PathVariable String code) { Optional employeeOpt = employeeService.findByCode(code); @@ -52,7 +49,7 @@ public class BookingController { response.put("name", employee.getName()); response.put("photoUrl", employee.getPhotoUrl()); - Map>> bookingsMap = new HashMap<>(); + Map> bookingsMap = new HashMap<>(); List bookingList = bookingService.getBookingsByEmployee(employee); for (Booking b : bookingList) { @@ -61,7 +58,7 @@ public class BookingController { bookingData.put("id", b.getId()); bookingData.put("place", b.getPlace().getPlace()); - bookingsMap.computeIfAbsent(dateKey, k -> new ArrayList<>()).add(bookingData); + bookingsMap.put(dateKey, bookingData); } response.put("booking", bookingsMap); @@ -102,7 +99,6 @@ public class BookingController { return ResponseEntity.ok(result); } - @PostMapping("/book") public ResponseEntity book(@PathVariable String code, @RequestBody Map body) { Optional employeeOpt = employeeService.findByCode(code); @@ -111,7 +107,12 @@ public class BookingController { try { String dateStr = body.get("date"); - String placeIdStr = body.get("placeID"); + + // поддерживаем все варианты ключей + String placeIdStr = body.getOrDefault("placeID", + body.getOrDefault("placeId", + body.getOrDefault("place", null))); + if (dateStr == null || placeIdStr == null) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } @@ -120,12 +121,17 @@ public class BookingController { Long placeId = Long.parseLong(placeIdStr); Place place = placeService.getPlaceById(placeId); + if (bookingService.getBookingByEmployeeAndDate(employee, date).isPresent()) { + return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } + if (bookingService.getBookingByDateAndPlace(date, place).isPresent()) { return ResponseEntity.status(HttpStatus.CONFLICT).build(); } bookingService.createBooking(employee, place, date); return ResponseEntity.status(HttpStatus.CREATED).build(); + } catch (Exception e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } diff --git a/src/main/java/com/example/nto/repository/BookingRepository.java b/src/main/java/com/example/nto/repository/BookingRepository.java index 54291a7..c6fc3eb 100644 --- a/src/main/java/com/example/nto/repository/BookingRepository.java +++ b/src/main/java/com/example/nto/repository/BookingRepository.java @@ -13,4 +13,6 @@ public interface BookingRepository extends JpaRepository { List findByEmployee(Employee employee); List findByDate(LocalDate date); Optional findByDateAndPlace(LocalDate date, Place place); + + Optional findByEmployeeAndDate(Employee employee, LocalDate date); } diff --git a/src/main/java/com/example/nto/service/BookingService.java b/src/main/java/com/example/nto/service/BookingService.java index 51f5f60..fe191ea 100644 --- a/src/main/java/com/example/nto/service/BookingService.java +++ b/src/main/java/com/example/nto/service/BookingService.java @@ -12,5 +12,8 @@ public interface BookingService { List getBookingsByEmployee(Employee employee); List getBookingsByDate(LocalDate date); Optional getBookingByDateAndPlace(LocalDate date, Place place); + + Optional getBookingByEmployeeAndDate(Employee employee, LocalDate date); + Booking createBooking(Employee employee, Place place, LocalDate date); } 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 51b0d19..2091f53 100644 --- a/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java @@ -35,6 +35,11 @@ public class BookingServiceImpl implements BookingService { return bookingRepository.findByDateAndPlace(date, place); } + @Override + public Optional getBookingByEmployeeAndDate(Employee employee, LocalDate date) { + return bookingRepository.findByEmployeeAndDate(employee, date); + } + @Override public Booking createBooking(Employee employee, Place place, LocalDate date) { Booking booking = new Booking();