Index: my-react-app/src/App.js
===================================================================
--- my-react-app/src/App.js	(revision d24f17cb212e43f94a77a44d655ba10b4b8143d2)
+++ my-react-app/src/App.js	(revision 65b6638865a1485e9cc722615973d9fb675b9d84)
@@ -11,4 +11,5 @@
 import ReservationConfirmation from "./components/ReservationConfirmation";
 import ReservationEdit from "./components/ReservationEdit";
+import axios from "axios";
 
 const App = () => {
@@ -50,11 +51,24 @@
             const isToday = selectedDate.toDateString() === today.toDateString();
 
-            const startHour = isToday ? today.getHours() : 9;
-            const startMinute = isToday ? Math.ceil(today.getMinutes() / 15) * 15 : 0;
+            // Determine the start hour and minute
+            let startHour = 9;
+            let startMinute = 0;
+            if (isToday) {
+                const currentHour = today.getHours();
+                const currentMinute = today.getMinutes();
+                // If current time is later than 09:00, start from the current hour and minute
+                if (currentHour > 9 || (currentHour === 9 && currentMinute >= 0)) {
+                    startHour = currentHour;
+                    startMinute = Math.ceil(currentMinute / 15) * 15;
+                }
+            }
 
-            let currentTime = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), startHour, startMinute);
+            // Create the start time and end time
+            const startTime = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), startHour, startMinute);
             const endTime = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 30);
 
+            // Generate time slots from start time to end time in 15-minute intervals
             const slots = [];
+            let currentTime = new Date(startTime);
             while (currentTime <= endTime) {
                 const option = currentTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
@@ -63,7 +77,9 @@
             }
 
+            // Update the timeSlots state
             setTimeSlots(slots);
         }
     }, [date]);
+
 
     const handleDateChange = (e) => {
@@ -83,13 +99,56 @@
     };
 
-    const handleSubmit = (e) => {
+    const handleSubmit = async (e) => {
         e.preventDefault();
-        console.log(date);
-        console.log(selectedTime);
-        console.log(numPeople);
-        console.log(searchValue);
+        const [year, month, day] = date.split("-");
+
+        let formattedDateTime;
+        const [selectedHours, selectedMinutes] = selectedTime.split(":");
+        // Check if selectedHours and selectedMinutes are valid numbers
+        if (!isNaN(selectedHours) && !isNaN(selectedMinutes)) {
+            const dateTime = new Date(Date.UTC(year, month - 1, day, selectedHours, selectedMinutes));
+            formattedDateTime = dateTime.toISOString().slice(0, 16).replace('T', ' ');
+        } else {
+            // Default values if selectedTime is not valid
+            const now = new Date();
+            let defaultTime;
+            if (now.getHours() >= 9 && now.getHours() <= 23) {
+                defaultTime = now;
+            } else {
+                defaultTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9, 0); // Set to 09:00 if current time is before 09:00
+            }
+            const dateTime = new Date(Date.UTC(year, month - 1, day, defaultTime.getHours(), defaultTime.getMinutes()));
+            formattedDateTime = dateTime.toISOString().slice(0, 16).replace('T', ' ');
+        }
+
+        const data = {
+            dateTime: formattedDateTime,
+            partySize: numPeople,
+            search: searchValue
+        };
+
+        console.log("pecatam data pod mene")
+        console.log(data)
+
+        try {
+            const response = await axios.post('http://localhost:8080/api/search', data);
+            const filteredRestaurants = response.data;
+            console.log(filteredRestaurants);
+            // Handle response accordingly
+        } catch (error) {
+            console.error('Error:', error);
+        }
     };
 
-    const today = new Date().toISOString().split('T')[0];
+
+
+// Rest of your component code...
+
+    const today = new Date();
+    const year = today.getFullYear();
+    const month = String(today.getMonth() + 1).padStart(2, '0');
+    const day = String(today.getDate()).padStart(2, '0');
+    const formattedDate = `${year}-${month}-${day}`;
+
 
     return (
@@ -100,5 +159,5 @@
                 <div className="col-auto">
                     <input className="form-control me-2" type="date" value={date} onChange={handleDateChange}
-                           min={today}/>
+                           min={formattedDate}/>
                 </div>
                 <div className="col-auto">
Index: src/main/java/com/example/rezevirajmasa/demo/repository/RestaurantRepository.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/repository/RestaurantRepository.java	(revision d24f17cb212e43f94a77a44d655ba10b4b8143d2)
+++ src/main/java/com/example/rezevirajmasa/demo/repository/RestaurantRepository.java	(revision 65b6638865a1485e9cc722615973d9fb675b9d84)
@@ -8,3 +8,5 @@
 
 public interface RestaurantRepository extends JpaRepository<Restaurant, Long> {
+
+
 }
Index: src/main/java/com/example/rezevirajmasa/demo/service/RestaurantService.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/service/RestaurantService.java	(revision d24f17cb212e43f94a77a44d655ba10b4b8143d2)
+++ src/main/java/com/example/rezevirajmasa/demo/service/RestaurantService.java	(revision 65b6638865a1485e9cc722615973d9fb675b9d84)
@@ -2,7 +2,9 @@
 
 import com.example.rezevirajmasa.demo.model.Restaurant;
+import com.example.rezevirajmasa.demo.model.TableEntity;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
 
@@ -18,3 +20,4 @@
     List<Restaurant> listRestaurantBy(String search);
     List<Restaurant> getRestaurantsWithAvailableTimeSlotsForToday();
+    public List<Restaurant> findRestaurantsByDateTimeAndPartySize(LocalDateTime dateTime, int partySize, String search);
 }
Index: src/main/java/com/example/rezevirajmasa/demo/service/impl/RestaurantServiceImpl.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/service/impl/RestaurantServiceImpl.java	(revision d24f17cb212e43f94a77a44d655ba10b4b8143d2)
+++ src/main/java/com/example/rezevirajmasa/demo/service/impl/RestaurantServiceImpl.java	(revision 65b6638865a1485e9cc722615973d9fb675b9d84)
@@ -143,3 +143,25 @@
         return restaurantsWithAvailableTimeSlots;
     }
+
+    @Override
+    public List<Restaurant> findRestaurantsByDateTimeAndPartySize(LocalDateTime dateTime, int partySize, String search) {
+        List<Restaurant> allRestaurants = restaurantRepository.findAll();
+        return allRestaurants.stream()
+                .filter(restaurant -> hasAvailableTable(restaurant, dateTime, partySize))
+                .filter(restaurant -> isMatch(restaurant, search))
+                .collect(Collectors.toList());
+    }
+
+    private boolean hasAvailableTable(Restaurant restaurant, LocalDateTime dateTime, int partySize) {
+        for (TableEntity table : restaurant.getTablesList()) {
+            if (table.isAvailable(dateTime) && table.getCapacity() >= partySize) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isMatch(Restaurant restaurant, String name) {
+        return name == null || name.isEmpty() || restaurant.getName().contains(name);
+    }
 }
Index: src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java	(revision d24f17cb212e43f94a77a44d655ba10b4b8143d2)
+++ src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java	(revision 65b6638865a1485e9cc722615973d9fb675b9d84)
@@ -6,5 +6,7 @@
 import com.example.rezevirajmasa.demo.service.RestaurantService;
 import com.example.rezevirajmasa.demo.service.TableService;
+import jdk.jfr.consumer.RecordingStream;
 import org.apache.coyote.Response;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -12,5 +14,7 @@
 
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.Map;
 
 @CrossOrigin(origins = "http://localhost:3000/")
@@ -34,4 +38,6 @@
     }
 
+    //restaurants
+
     @RequestMapping("/api/restaurants")
     public ResponseEntity<List<Restaurant>> getAllRestaurants() {
@@ -42,4 +48,23 @@
     public ResponseEntity<Restaurant> getRestaurantById(@PathVariable Long restaurantId) {
         return new ResponseEntity<Restaurant>(restaurantService.findById(restaurantId), HttpStatus.OK);
+    }
+
+    @PostMapping("/api/search")
+    public ResponseEntity<List<Restaurant>> searchRestaurants(@RequestBody Map<String, Object> requestData) {
+        String dateTime = (String) requestData.get("dateTime");
+        Integer partySize = (Integer) requestData.get("partySize");
+        String search = (String) requestData.get("search");
+
+        // Now proceed with parsing dateTime and performing the search based on the received parameters
+
+        LocalDateTime parsedDateTime = null;
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+        if (dateTime != null) {
+            parsedDateTime = LocalDateTime.parse(dateTime, formatter);
+        }
+
+        List<Restaurant> filteredRestaurants = restaurantService.findRestaurantsByDateTimeAndPartySize(parsedDateTime, partySize, search);
+
+        return new ResponseEntity<List<Restaurant>>(filteredRestaurants, HttpStatus.OK);
     }
 
