+Employee not found with code
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user