+Employee not found with code

This commit is contained in:
2025-12-04 20:40:42 +03:00
parent aee0974918
commit 642eaeaaec
4 changed files with 73 additions and 0 deletions

View File

@@ -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;
}
}
} }

View File

@@ -22,4 +22,10 @@ public interface BookingRepository extends JpaRepository<Booking, Long> {
List<Booking> findByDateIn(List<LocalDate> dates); List<Booking> findByDateIn(List<LocalDate> dates);
Optional<Booking> findById(Long id); Optional<Booking> findById(Long id);
Optional<Booking> findByDateAndPlace_Id(LocalDate date, Long placeId);
List<Booking> findByDateAndEmployee_Code(LocalDate date, String employeeCode);
List<Booking> findByDateInAndEmployee_Code(List<LocalDate> dates, String employeeCode);
} }

View File

@@ -3,6 +3,7 @@ package com.example.nto.service;
import com.example.nto.entity.Booking; import com.example.nto.entity.Booking;
import com.example.nto.entity.Employee; import com.example.nto.entity.Employee;
import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@@ -20,4 +21,6 @@ public interface BookingService {
Map<String, List<Booking.AvailablePlaceDto>> getAvailablePlaces(String code); Map<String, List<Booking.AvailablePlaceDto>> getAvailablePlaces(String code);
boolean isEmployeeExists(String code); boolean isEmployeeExists(String code);
Booking createBooking(String employeeCode, LocalDate date, long placeId);
} }

View File

@@ -103,6 +103,50 @@ public class BookingServiceImpl implements BookingService {
return result; 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<Booking> existingPlaceBooking = bookingRepository.findByDateAndPlace_Id(date, placeId);
if (existingPlaceBooking.isPresent()) {
throw new RuntimeException("Place " + placeId + " is already booked for " + date);
}
// Проверяем, нет ли у сотрудника уже брони на эту дату
List<Booking> 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);
}
} }