From 642eaeaaecb4fb5144c6b145980ddf3d4ab9fa8c Mon Sep 17 00:00:00 2001 From: Dell Date: Thu, 4 Dec 2025 20:40:42 +0300 Subject: [PATCH] +Employee not found with code --- .../nto/controller/BookingController.java | 20 +++++++++ .../nto/repository/BookingRepository.java | 6 +++ .../example/nto/service/BookingService.java | 3 ++ .../nto/service/impl/BookingServiceImpl.java | 44 +++++++++++++++++++ 4 files changed, 73 insertions(+) diff --git a/src/main/java/com/example/nto/controller/BookingController.java b/src/main/java/com/example/nto/controller/BookingController.java index e0b2af4..14a46c7 100644 --- a/src/main/java/com/example/nto/controller/BookingController.java +++ b/src/main/java/com/example/nto/controller/BookingController.java @@ -45,4 +45,24 @@ public class BookingController { } } + public static class CreateBookingRequest { + private LocalDate date; + private long placeId; + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public long getPlaceId() { + return placeId; + } + + public void setPlaceId(long placeId) { + this.placeId = placeId; + } + } } diff --git a/src/main/java/com/example/nto/repository/BookingRepository.java b/src/main/java/com/example/nto/repository/BookingRepository.java index 9bb3aa0..d88e7e3 100644 --- a/src/main/java/com/example/nto/repository/BookingRepository.java +++ b/src/main/java/com/example/nto/repository/BookingRepository.java @@ -22,4 +22,10 @@ public interface BookingRepository extends JpaRepository { List findByDateIn(List dates); Optional findById(Long id); + + Optional findByDateAndPlace_Id(LocalDate date, Long placeId); + + List findByDateAndEmployee_Code(LocalDate date, String employeeCode); + + List findByDateInAndEmployee_Code(List dates, String employeeCode); } diff --git a/src/main/java/com/example/nto/service/BookingService.java b/src/main/java/com/example/nto/service/BookingService.java index 0fc3edc..7125167 100644 --- a/src/main/java/com/example/nto/service/BookingService.java +++ b/src/main/java/com/example/nto/service/BookingService.java @@ -3,6 +3,7 @@ package com.example.nto.service; import com.example.nto.entity.Booking; import com.example.nto.entity.Employee; +import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.Optional; @@ -20,4 +21,6 @@ public interface BookingService { Map> getAvailablePlaces(String code); boolean isEmployeeExists(String code); + Booking createBooking(String employeeCode, LocalDate date, long placeId); + } 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 09dbf12..cbaef40 100644 --- a/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/BookingServiceImpl.java @@ -103,6 +103,50 @@ public class BookingServiceImpl implements BookingService { return result; } + @Override + public Booking createBooking(String employeeCode, LocalDate date, long placeId) { + // Проверяем сотрудника + Employee employee = employeeRepository.findByCode(employeeCode) + .orElseThrow(() -> new RuntimeException("Employee not found with code: " + employeeCode)); + + // Проверяем место + Place place = placeRepository.findById(placeId) + .orElseThrow(() -> new RuntimeException("Place not found with id: " + placeId)); + + // Проверяем, что дата в пределах 3 дней от сегодня + LocalDate today = LocalDate.now(); + LocalDate maxDate = today.plusDays(3); + + if (date.isBefore(today)) { + throw new RuntimeException("Cannot book in the past. Date: " + date); + } + + if (date.isAfter(maxDate)) { + throw new RuntimeException("Can only book up to 3 days in advance. Date: " + date); + } + + // Проверяем, не занято ли уже это место на эту дату + Optional existingPlaceBooking = bookingRepository.findByDateAndPlace_Id(date, placeId); + if (existingPlaceBooking.isPresent()) { + throw new RuntimeException("Place " + placeId + " is already booked for " + date); + } + + // Проверяем, нет ли у сотрудника уже брони на эту дату + List employeeBookings = bookingRepository.findByDateAndEmployee_Code(date, employeeCode); + if (!employeeBookings.isEmpty()) { + throw new RuntimeException("Employee already has a booking on " + date); + } + + // Создаем новое бронирование + Booking booking = Booking.builder() + .date(date) + .place(place) + .employee(employee) + .build(); + + // Сохраняем в базу + return bookingRepository.save(booking); + } }