Index: pom.xml
===================================================================
--- pom.xml	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ pom.xml	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -43,5 +43,4 @@
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -66,5 +65,4 @@
         </dependency>
     </dependencies>
-
     <build>
         <plugins>
@@ -95,4 +93,3 @@
         </plugins>
     </build>
-
 </project>
Index: src/main/java/com/example/skychasemk/controller/AirportController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/AirportController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/AirportController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -25,5 +25,5 @@
     @GetMapping("/{id}")
     public Optional<Airport> getAirportById(@PathVariable("id") Integer airportID) {
-        return airportService.getAirportById(airportID);
+        return Optional.ofNullable(airportService.getAirportById(airportID));
     }
 
Index: src/main/java/com/example/skychasemk/controller/ApplicationUserController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/ApplicationUserController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/ApplicationUserController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -15,5 +15,5 @@
 @RestController
 @RequestMapping("/api/user")
-@CrossOrigin(origins = "http://localhost:5173") // Allow frontend access
+@CrossOrigin(origins = "http://localhost:5173")
 public class ApplicationUserController {
 
@@ -23,13 +23,26 @@
     @PostMapping("/signup")
     public ResponseEntity<String> registerUser(@Valid @RequestBody ApplicationUserDTO userDTO) {
-        ApplicationUser savedUser = userService.registerUser(userDTO);
-        return ResponseEntity.ok("User saved successfully");
+        try {
+            userService.registerUser(userDTO);
+            return ResponseEntity.ok("User saved successfully");
+        } catch (RuntimeException e) {
+            return ResponseEntity.badRequest().body(e.getMessage());
+        }
     }
+
+
     @PostMapping("/login")
-    public ResponseEntity<Map<String,Long>> loginUser(@Valid @RequestBody ApplicationUserLoginDTO userDTO) {
-        ApplicationUser loginUser = userService.findByEmail(userDTO);
-        Map<String,Long> response = new HashMap<>();
-        response.put("userId",loginUser.getUserid());
-        return ResponseEntity.ok(response);
+    public ResponseEntity<Map<String, Object>> loginUser(@Valid @RequestBody ApplicationUserLoginDTO loginDTO) {
+        Map<String, Object> response = new HashMap<>();
+        try {
+            ApplicationUser user = userService.loginUser(loginDTO);
+            response.put("userId", user.getUserId());
+            response.put("name", user.getName());
+            return ResponseEntity.ok(response);
+        } catch (RuntimeException e) {
+            response.put("error", e.getMessage());
+            return ResponseEntity.status(401).body(response);
+        }
     }
+
 }
Index: src/main/java/com/example/skychasemk/controller/BookingController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/BookingController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/BookingController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,12 +2,14 @@
 
 import com.example.skychasemk.dto.BookingDTO;
+import com.example.skychasemk.model.ApplicationUser;
 import com.example.skychasemk.model.Booking;
-import com.example.skychasemk.repository.BookingRepository;
+import com.example.skychasemk.repository.ApplicationUserRepository;
 import com.example.skychasemk.services.BookingService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDate;
-import java.util.Optional;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 @RestController
@@ -15,39 +17,31 @@
 public class BookingController {
 
-    @Autowired
-    private BookingService bookingService;
+    private final BookingService bookingService;
+    private final ApplicationUserRepository userRepository;
 
     @Autowired
-    private BookingRepository bookingRepository;
-
-
-    @GetMapping("/flights/id/{id}")
-    public Optional<Booking> getBookingById(@PathVariable("id") Integer bookingID) {
-        return bookingService.getBookingById(bookingID);
-    }
-
-    @PutMapping("/flights/{bookingId}")
-    public Booking updateBooking(@PathVariable("bookingId") Integer bookingID, @RequestBody Booking booking) {
-        return bookingService.updateBooking(bookingID, booking);
-    }
-
-    @GetMapping("/bookings/getAll/{flightId}")
-    public Booking getAllBookings(@PathVariable Integer flightId){
-        return (Booking) bookingRepository.findBookingsByFlightId(flightId);
+    public BookingController(BookingService bookingService, ApplicationUserRepository userRepository) {
+        this.bookingService = bookingService;
+        this.userRepository = userRepository;
     }
 
     @PostMapping("/bookings")
-    public Booking createBooking(@RequestBody BookingDTO bookingRequest) {
-        Booking newBooking = new Booking();
-        newBooking.setUserId(bookingRequest.getUserId());
-        newBooking.setFlightId(bookingRequest.getFlightId());
-        newBooking.setBookingDate(LocalDate.now());
-        newBooking.setStatus(Booking.payment_status.PENDING);
-        newBooking.setTotal_cost(bookingRequest.getTotalCost());
-        newBooking.setSeatNumber(bookingRequest.getSeatNumber());
-        System.out.println("Saving Booking: " + newBooking);
+    public Booking createBooking(@RequestBody Map<String, Object> payload) {
 
-        return bookingRepository.save(newBooking);
+        Integer userId = (Integer) payload.get("userId");
+        List<Integer> flightIds = (List<Integer>) payload.get("flightIds");
+        BigDecimal totalCost = new BigDecimal(payload.get("totalCost").toString());
+
+        // Find user
+        ApplicationUser user = userRepository.findById(userId.longValue())
+                .orElseThrow(() -> new RuntimeException("User not found"));
+
+        // Map to BookingDTO
+        BookingDTO dto = new BookingDTO();
+        dto.setUser(user);
+        dto.setFlights(flightIds);
+        dto.setTotalCost(totalCost);
+
+        return bookingService.createBooking(dto);
     }
 }
-
Index: src/main/java/com/example/skychasemk/controller/DestinationController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/DestinationController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/DestinationController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,11 +1,11 @@
 package com.example.skychasemk.controller;
 
-import com.example.skychasemk.model.Destination;
+import com.example.skychasemk.dto.DestinationDTO;
 import com.example.skychasemk.services.DestinationService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Optional;
 
 @RestController
@@ -16,31 +16,39 @@
     private DestinationService destinationService;
 
-    // Get all destinations
     @GetMapping
-    public List<Destination> getAllDestinations() {
-        return destinationService.getAllDestinations();
+    public ResponseEntity<List<DestinationDTO>> getAllDestinations() {
+        List<DestinationDTO> destinations = destinationService.getAllDestinations();
+        return ResponseEntity.ok(destinations);
     }
 
-    // Get destination by ID
     @GetMapping("/{id}")
-    public Optional<Destination> getDestinationById(@PathVariable("id") Integer destinationID) {
-        return destinationService.getDestinationById(destinationID);
+    public ResponseEntity<DestinationDTO> getDestinationById(@PathVariable("id") Integer destinationId) {
+        DestinationDTO dto = destinationService.getDestinationById(destinationId);
+        return ResponseEntity.ok(dto);
     }
 
-
-    // Update an existing destination
-    @PutMapping("/{id}")
-    public Destination updateDestination(@PathVariable("id") Integer destinationID, @RequestBody Destination destination) {
-        return destinationService.updateDestination(destinationID, destination);
+    @PostMapping
+    public ResponseEntity<DestinationDTO> createDestination(@RequestBody DestinationDTO dto) {
+        DestinationDTO created = destinationService.createDestination(dto);
+        return ResponseEntity.status(201).body(created);
     }
 
-    // Delete a destination
+    @PutMapping("/{id}")
+    public ResponseEntity<DestinationDTO> updateDestination(@PathVariable("id") Integer destinationId,
+                                                            @RequestBody DestinationDTO dto) {
+        DestinationDTO updated = destinationService.updateDestination(destinationId, dto);
+        return ResponseEntity.ok(updated);
+    }
+
     @DeleteMapping("/{id}")
-    public void deleteDestination(@PathVariable("id") Integer destinationID) {
-        destinationService.deleteDestination(destinationID);
+    public ResponseEntity<Void> deleteDestination(@PathVariable("id") Integer destinationId) {
+        destinationService.deleteDestination(destinationId);
+        return ResponseEntity.noContent().build();
     }
-    @GetMapping("/destinations")
-    public List<String> getDestinations() {
-        return destinationService.getAllCities();
+
+    @GetMapping("/cities")
+    public ResponseEntity<List<String>> getCities() {
+        List<String> cities = destinationService.getAllCities();
+        return ResponseEntity.ok(cities);
     }
 }
Index: src/main/java/com/example/skychasemk/controller/FlightController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/FlightController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/FlightController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,8 +1,6 @@
 package com.example.skychasemk.controller;
 
-import com.example.skychasemk.model.Destination;
+import com.example.skychasemk.dto.FlightDTO;
 import com.example.skychasemk.model.Flight;
-import com.example.skychasemk.repository.DestinationRepository;
-import com.example.skychasemk.repository.FlightRepository;
 import com.example.skychasemk.services.FlightService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +13,4 @@
 import java.util.Optional;
 
-import static com.example.skychasemk.model.Destination.getAirportID;
-
 @RestController
 @RequestMapping("/api/flights")
@@ -23,37 +19,31 @@
     @Autowired
     private FlightService flightService;
-    @Autowired
-    private FlightRepository flightRepository;
-    @Autowired
-    private DestinationRepository destinationRepository;
 
     @GetMapping
-    public List<Flight> getAllFlights() {
-        return flightRepository.findAll();
+    public List<FlightDTO> getAllFlights() {
+        return flightService.getAllFlights();
     }
 
     @GetMapping("/{flightId}")
-    public Optional<Flight> getFlightById(@PathVariable("flightId") Long flightID) {
-        return flightService.getFlightById(flightID);
+    public ResponseEntity<Flight> getFlightById(@PathVariable("flightId") Integer flightID) {
+        Optional<Flight> flight = Optional.ofNullable(flightService.getFlightById(flightID));
+        return flight.map(ResponseEntity::ok)
+                .orElse(ResponseEntity.notFound().build());
     }
 
-    @GetMapping("/flight-search")
+    @GetMapping("/search")
     public ResponseEntity<List<Flight>> searchFlights(
-            @RequestParam String departureCity,
-            @RequestParam String destination,
-            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate departureDate,
-            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate returnDate) {
+            @RequestParam String departureName,
+            @RequestParam String arrivalName,
+            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate departureDate,
+            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate returnDate
+    ) {
+        List<Flight> flights = flightService.searchFlights(departureName, arrivalName, departureDate, returnDate);
 
-        List<Destination> destinations = destinationRepository.findAll();
+        if (flights.isEmpty()) {
+            return ResponseEntity.noContent().build();
+        }
 
-        Integer departureID = Integer.valueOf(getAirportID(departureCity, destinations));
-        Integer destinationID = Integer.valueOf(getAirportID(destination, destinations));
-
-
-
-        List<Flight> flights = flightRepository.findFlights(departureID,destinationID, departureDate);
         return ResponseEntity.ok(flights);
     }
-
 }
-
Index: src/main/java/com/example/skychasemk/controller/NotificationController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/NotificationController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/NotificationController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -24,5 +24,5 @@
     @GetMapping("/{userId}")
     public ResponseEntity<List<Notification>> getAllNotifications(@PathVariable Integer userId) {
-        List<Notification> notifications = notificationRepository.findByUserId(userId);
+        List<Notification> notifications = notificationRepository.findByUser_UserId(Long.valueOf(userId));
         return ResponseEntity.ok(notifications);
     }
Index: src/main/java/com/example/skychasemk/controller/PaymentController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/PaymentController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/PaymentController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -21,5 +21,5 @@
     @GetMapping("/payments/{id}")
     public Optional<Payment> getPaymentById(@PathVariable("id") Integer paymentID) {
-        return paymentService.getPaymentById(paymentID);
+        return Optional.ofNullable(paymentService.getPaymentById(paymentID));
     }
 
Index: src/main/java/com/example/skychasemk/controller/ReportController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/ReportController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/controller/ReportController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,32 @@
+package com.example.skychasemk.controller;
+
+import com.example.skychasemk.model.BestValueFlight;
+import com.example.skychasemk.service.BestValueFlightService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class ReportController {
+
+    private final BestValueFlightService bestValueFlightService;
+
+    public ReportController(BestValueFlightService bestValueFlightService) {
+        this.bestValueFlightService = bestValueFlightService;
+    }
+
+    // Central reports function
+    @GetMapping("/reports")
+    public Map<String, Object> reports(String type) {
+        switch (type) {
+            case "bestValueFlights":
+                List<BestValueFlight> flights = bestValueFlightService.getAllBestValueFlights();
+                return Map.of("reportType", "Best Value Flights", "data", flights);
+            // You can add more report types here
+            default:
+                return Map.of("error", "Invalid report type");
+        }
+    }
+}
Index: src/main/java/com/example/skychasemk/controller/ReviewController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/ReviewController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/ReviewController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,11 +2,15 @@
 
 import com.example.skychasemk.dto.ReviewDTO;
+import com.example.skychasemk.model.Booking;
+import com.example.skychasemk.model.Flight;
 import com.example.skychasemk.model.Review;
-import com.example.skychasemk.repository.ReviewRepository;
+import com.example.skychasemk.repository.*;
 import com.example.skychasemk.services.ReviewService;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
@@ -17,7 +21,24 @@
     @Autowired
     private ReviewService reviewService;
+
     @Autowired
     private ReviewRepository reviewRepository;
 
+    @Autowired
+    private BookingFlightRepository bookingFlightRepository;
+
+    @Autowired
+    private BookingRepository bookingRepository;
+
+    @Autowired
+    private FlightRepository flightRepository;
+
+    @Autowired
+    private ApplicationUserRepository userRepository;
+    // Fetch flights booked by a user for reviews
+    @GetMapping("/flights/user/{userId}")
+    public List<Flight> getFlightsForUserReviews(@PathVariable Long userId) {
+        return bookingFlightRepository.findFlightsByUserId(userId);
+    }
     // Get all reviews
     @GetMapping
@@ -26,14 +47,24 @@
     }
 
-    @GetMapping("/{userId}")
-    public ResponseEntity<List<Review>> getReviewsByFlightId(@PathVariable Integer userId) {
-        List<Review> reviews = reviewRepository.findByUserId(userId);
+    // Get reviews by flight
+    @GetMapping("/flights/{flightId}")
+    public ResponseEntity<List<Review>> getReviewsByFlightId(@PathVariable Integer flightId) {
+        List<Review> reviews = reviewService.getReviewsByFlightId(flightId);
+        return ResponseEntity.ok(reviews);
+    }
+
+    // Get reviews by airport
+    @GetMapping("/airports/{airportId}")
+    public ResponseEntity<List<Review>> getReviewsByAirportId(@PathVariable Integer airportId) {
+        List<Review> reviews = reviewService.getReviewsByAirportId(airportId);
         return ResponseEntity.ok(reviews);
     }
 
     @PostMapping
-    public ResponseEntity<Review> submitReview(@RequestBody ReviewDTO dto) {
-        Review savedReview = reviewService.submitReview(dto);
-        return ResponseEntity.ok(savedReview);
+    public Review submitReview(@RequestBody ReviewDTO dto) {
+        return reviewService.submitReview(dto.getUserId(),
+                Long.valueOf(dto.getTargetId()),
+                dto.getReviewComment(),
+                dto.getRating());
     }
 
Index: src/main/java/com/example/skychasemk/controller/SupportTicketController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/SupportTicketController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/SupportTicketController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,4 +3,5 @@
 import ch.qos.logback.core.status.Status;
 import com.example.skychasemk.dto.SupportTicketDTO;
+import com.example.skychasemk.enums.TicketStatus;
 import com.example.skychasemk.model.SupportTicket;
 import com.example.skychasemk.services.SupportTicketService;
@@ -30,5 +31,5 @@
     @GetMapping("/{id}")
     public Optional<SupportTicket> getTicketById(@PathVariable("id") Integer ticketID) {
-        return supportTicketService.getTicketById(ticketID);
+        return Optional.ofNullable(supportTicketService.getTicketById(ticketID));
     }
 
@@ -42,5 +43,5 @@
     public ResponseEntity<SupportTicket> updateTicket(@PathVariable("ticketId") Integer ticketId, @PathVariable String status) {
         try {
-            SupportTicket.TicketStatus newStatus = SupportTicket.TicketStatus.valueOf(status.toUpperCase());
+            TicketStatus newStatus = TicketStatus.valueOf(status.toUpperCase());
             return ResponseEntity.ok(supportTicketService.updateTicket(ticketId, newStatus));
         } catch (IllegalArgumentException e) {
Index: c/main/java/com/example/skychasemk/controller/TopMonthlyReportController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/TopMonthlyReportController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,23 +1,0 @@
-package com.example.skychasemk.controller;
-
-import com.example.skychasemk.model.TopMonthlyReport;
-import com.example.skychasemk.repository.TopMonthlyReportRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/views")
-public class TopMonthlyReportController {
-    @Autowired
-    private TopMonthlyReportRepository repository;
-
-
-    @GetMapping
-    public List<TopMonthlyReport> getAllReports() {
-        return repository.findAll();
-    }
-
-}
Index: src/main/java/com/example/skychasemk/controller/WishlistController.java
===================================================================
--- src/main/java/com/example/skychasemk/controller/WishlistController.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/controller/WishlistController.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,9 +2,5 @@
 
 import com.example.skychasemk.dto.WishlistDTO;
-import com.example.skychasemk.model.Flight;
 import com.example.skychasemk.model.Wishlist;
-import com.example.skychasemk.repository.BookingRepository;
-import com.example.skychasemk.repository.FlightRepository;
-import com.example.skychasemk.repository.WishlistRepository;
 import com.example.skychasemk.services.WishlistService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,7 +9,5 @@
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 @RestController
@@ -24,47 +18,38 @@
     private WishlistService wishlistService;
 
-    @Autowired
-    private WishlistRepository wishlistRepository;
-
-    @Autowired
-    private FlightRepository flightRepository;
-
     @GetMapping
     public List<Wishlist> getAllWishlists() {
-        return wishlistRepository.findAll();
+        return wishlistService.getAllWishlists();
     }
 
+    @GetMapping("/{userId}")
+    public ResponseEntity<List<Wishlist>> getWishlistForUser(@PathVariable Long userId) {
+        List<Wishlist> wishlist = wishlistService.getWishlistForUser(userId);
+        return ResponseEntity.ok(wishlist);
+    }
+
+
     @PostMapping("/add")
-    public Wishlist createWishlist(@RequestBody Wishlist wishlist) {
-        return wishlistService.saveWishlist(wishlist);
+    public ResponseEntity<Wishlist> addToWishlist(@RequestBody WishlistDTO wishlistRequest) {
+        try {
+            Wishlist saved = wishlistService.addToWishlist(wishlistRequest);
+            return ResponseEntity.status(HttpStatus.CREATED).body(saved);
+        } catch (Exception e) {
+            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+        }
     }
 
     @DeleteMapping
-    public void deleteWishlist(@RequestParam("userId") Integer userId, @RequestParam("targetId") Integer targetId) {
-        wishlistService.deleteRecordFromWishlist(userId, targetId);
+    public ResponseEntity<Void> deleteFromWishlist(@RequestParam("userId") Integer userId,
+                                                   @RequestParam("targetId") Integer targetId) {
+        wishlistService.removeFromWishlist(userId, targetId);
+        return ResponseEntity.noContent().build();
     }
 
-    @GetMapping("/{userId}")
-    public ResponseEntity<List<Wishlist>> getWishlist(@PathVariable Long userId) {
-        List<Wishlist> wishlist = wishlistService.getAllItems(userId);
-        return ResponseEntity.ok(wishlist);
+
+    @DeleteMapping("/{wishlistId}")
+    public ResponseEntity<Void> deleteWishlistItem(@PathVariable Integer wishlistId) {
+        wishlistService.deleteWishlistItem(wishlistId);
+        return ResponseEntity.noContent().build();
     }
-
-    @GetMapping("/flight/{wishlistId}")
-    public ResponseEntity<List<Optional<Wishlist>>> getFlight(@PathVariable Long wishlistId){
-        Optional<Wishlist> wishlist = wishlistRepository.getFlightFromWishlist(wishlistId);
-        return ResponseEntity.ok(Collections.singletonList(wishlist));
-    }
-
-    @PostMapping
-    public ResponseEntity<String> updateWishlist(@RequestBody WishlistDTO wishlistRequest) {
-        try {
-            wishlistService.updateWishlist(wishlistRequest);
-            return ResponseEntity.ok("Wishlist updated successfully");
-        } catch (Exception e) {
-            e.printStackTrace();
-            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error updating wishlist");
-        }
-    }
-
 }
Index: src/main/java/com/example/skychasemk/dto/AirportDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/AirportDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/AirportDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,7 +3,7 @@
 public class AirportDTO {
 
-    private Integer airportID;
+    private Integer airportId;
     private String name;
-    private Integer city;
+    private Integer destinationId; // instead of city
     private String country;
     private String code;
@@ -11,9 +11,9 @@
     // Getters and Setters
     public Integer getAirportID() {
-        return airportID;
+        return airportId;
     }
 
     public void setAirportID(Integer airportID) {
-        this.airportID = airportID;
+        this.airportId = airportID;
     }
 
@@ -27,9 +27,9 @@
 
     public Integer getCity() {
-        return city;
+        return destinationId;
     }
 
     public void setCity(Integer city) {
-        this.city = city;
+        this.destinationId = city;
     }
 
Index: src/main/java/com/example/skychasemk/dto/ApplicationUserDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/ApplicationUserDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/ApplicationUserDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -6,6 +6,10 @@
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class ApplicationUserDTO {
+
+    private Long userId;
 
     @NotBlank
@@ -19,15 +23,16 @@
     private String email;
 
-    @Size(min = 6, message = "Password must be at least 6 characters long")
+    private List<BookingDTO> bookings;
+
     private String password;
 
-    private String phone_number;
+    private String phoneNumber;  // camelCase to match entity
 
     public String getPhone_number() {
-        return phone_number;
+        return phoneNumber;
     }
 
     public void setPhone_number(String phone_number) {
-        this.phone_number = phone_number;
+        this.phoneNumber = phone_number;
     }
 }
Index: src/main/java/com/example/skychasemk/dto/ApplicationUserLoginDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/ApplicationUserLoginDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/ApplicationUserLoginDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -6,12 +6,12 @@
 import lombok.Data;
 
+@Data
 public class ApplicationUserLoginDTO {
 
     @Email
-        @NotBlank
-        private String email;
+    @NotBlank
+    private String email;
 
-    public String getEmail() {
-        return email;
-    }
+    @NotBlank
+    private String password;
 }
Index: src/main/java/com/example/skychasemk/dto/BookingDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/BookingDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/BookingDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,42 +1,24 @@
 package com.example.skychasemk.dto;
 
-import lombok.Getter;
-import lombok.Setter;
+import com.example.skychasemk.model.ApplicationUser;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
+import java.util.List;
 
 public class BookingDTO {
+    private Long user;
+    private List<Integer> flights;
+    private BigDecimal totalCost;
 
-    @Setter
-    private Integer bookingId;
+    public Long getUser() { return (long) Math.toIntExact(user); }
+    public void setUser(ApplicationUser user) { this.user = user.getUserId(); }
 
-    @Getter
-    private Integer userId;
-    @Setter
-    @Getter
-    private Integer flightId;
-    @Setter
-    @Getter
-    private LocalDate bookingDate;
-    @Setter
-    @Getter
-    private PaymentStatus status;
-    @Setter
-    @Getter
-    private BigDecimal totalCost;
-    @Setter
-    @Getter
-    private Integer seatNumber;
+    public List<Integer> getFlights() { return flights; }
 
-    public enum PaymentStatus {
-        PENDING,
-        COMPLETED,
-        CANCELLED
+    public BigDecimal getTotalCost() { return totalCost; }
+    public void setTotalCost(BigDecimal totalCost) { this.totalCost = totalCost; }
+
+    public void setFlights(List<Integer> flights) {
+        this.flights=flights;
     }
-
-    public void setUserID(Integer userId) {
-        this.userId = userId;
-    }
-
 }
Index: src/main/java/com/example/skychasemk/dto/BookingFlightDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/BookingFlightDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/dto/BookingFlightDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,10 @@
+package com.example.skychasemk.dto;
+
+import lombok.Data;
+
+@Data
+public class BookingFlightDTO {
+    private Long bookingId;
+    private Long flightId;
+    private Integer seatNumber;
+}
Index: src/main/java/com/example/skychasemk/dto/DestinationDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/DestinationDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/DestinationDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,65 +1,23 @@
 package com.example.skychasemk.dto;
 
+import lombok.Data;
+
+import java.util.List;
+
+@Data
 public class DestinationDTO {
 
     private Integer destinationID;
+    private String name;
+    private String country;
+    private String description;
+    private String popularAttraction;
+    private String bestTimeToVisit;
+    private List<String> airportNames;
 
-    private String name;
-
-    private String country;
-
-    private String description;
-
-    private String popularAttraction;
-
-    private String bestTimeToVisit;
-
-    // Getters and Setters
-    public Integer getDestinationID() {
-        return destinationID;
-    }
-
-    public void setDestinationID(Integer destinationID) {
-        this.destinationID = destinationID;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
+    public DestinationDTO(Integer destinationId, String name, String country) {
+        this.destinationID=destinationId;
         this.name = name;
-    }
-
-    public String getCountry() {
-        return country;
-    }
-
-    public void setCountry(String country) {
         this.country = country;
     }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getPopularAttraction() {
-        return popularAttraction;
-    }
-
-    public void setPopularAttraction(String popularAttraction) {
-        this.popularAttraction = popularAttraction;
-    }
-
-    public String getBestTimeToVisit() {
-        return bestTimeToVisit;
-    }
-
-    public void setBestTimeToVisit(String bestTimeToVisit) {
-        this.bestTimeToVisit = bestTimeToVisit;
-    }
 }
Index: src/main/java/com/example/skychasemk/dto/FlightDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/FlightDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/FlightDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,4 +1,6 @@
 package com.example.skychasemk.dto;
 
+import com.example.skychasemk.model.Flight;
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
@@ -9,27 +11,27 @@
 import java.util.Date;
 
-@Setter
-@Getter
+@Data
 public class FlightDTO {
+    private Integer flightID;
+    private String flightNumber;
+    private String departureCity;
+    private String arrivalCity;
+    private LocalDate departureDate;
+    private LocalDate arrivalDate;
+    private BigDecimal price;
+    private Integer availableSeats;
 
-    // Getters and Setters
-    private Integer flightID;
+    public FlightDTO(Flight f) {
+        this.flightID = f.getFlightID();
+        this.flightNumber = f.getFlightNumber();
+        this.departureCity = f.getDepartureAirport().getDestination().getName();
+        this.arrivalCity = f.getArrivalAirport().getDestination().getName();
+        this.departureDate = f.getDepartureDate();
+        this.arrivalDate = f.getReturnDate();
+        this.price = f.getPrice();
+        this.availableSeats = f.getAvailableSeats();
+    }
 
-    private String flightNumber;
+    // getters and setters
+}
 
-    private Integer departureAirport;
-
-    private Integer arrivalAirport;
-
-    private LocalTime departureTime;
-
-    private LocalTime arrivalTime;
-
-    private BigDecimal price;
-
-    private Integer availableSeats;
-    private LocalDate departureDate;
-
-    private LocalDate arrivalDate;
-
-}
Index: src/main/java/com/example/skychasemk/dto/NotificationDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/NotificationDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/NotificationDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,59 +1,17 @@
 package com.example.skychasemk.dto;
+
+import com.example.skychasemk.enums.NotificationType;
+import com.example.skychasemk.model.ApplicationUser;
+import lombok.Data;
 
 import java.time.LocalDate;
 
+@Data
 public class NotificationDTO {
 
-    private Integer notificationID;
-    private Integer userID;
+    private Integer notificationId;
+    private ApplicationUser user;
     private String message;
-    private Type type;
+    private NotificationType type;
     private LocalDate dateSent;
-
-    public enum Type {
-        BOOKING_CONFIRMATION,
-        FLIGHT_DELAY,
-        GENERAL_UPDATE
-    }
-
-    // Getters and Setters
-    public Integer getNotificationID() {
-        return notificationID;
-    }
-
-    public void setNotificationID(Integer notificationID) {
-        this.notificationID = notificationID;
-    }
-
-    public Integer getUserID() {
-        return userID;
-    }
-
-    public void setUserID(Integer userID) {
-        this.userID = userID;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    public void setType(Type type) {
-        this.type = type;
-    }
-
-    public LocalDate getDateSent() {
-        return dateSent;
-    }
-
-    public void setDateSent(LocalDate dateSent) {
-        this.dateSent = dateSent;
-    }
 }
Index: src/main/java/com/example/skychasemk/dto/PaymentDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/PaymentDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/PaymentDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,5 +1,8 @@
 package com.example.skychasemk.dto;
 
+import com.example.skychasemk.enums.PaymentMethod;
+import com.example.skychasemk.enums.PaymentStatus;
 import com.example.skychasemk.model.Booking;
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
@@ -8,46 +11,13 @@
 import java.time.LocalDate;
 
+@Data
 public class PaymentDTO {
-
-    // Getters and Setters
-    @Setter
-    @Getter
-    private Long paymentID;
-    @Getter
-    private Integer bookingId;
-    @Setter
-    private Integer userId;
-    @Setter
-    @Getter
-    private PaymentMethod method;
-    @Setter
-    @Getter
+    private Long paymentId;
+    private Long bookingId;
+    private Long userId;
+    private PaymentMethod paymentMethod;
     private BigDecimal amount;
-    @Getter
     private LocalDate transactionDate;
-    @Setter
-    @Getter
-    private PaymentStatus status;
-    @Setter
-    @Getter
-    private Long flightId;
-
-    public enum PaymentStatus {
-        PENDING,
-        COMPLETED,
-        CANCELLED
-    }
-
-    public enum PaymentMethod {
-        PAYPAL,
-        DEBIT,
-        CREDIT
-    }
-
-
-    public Long getUserId() {
-        return Long.valueOf(userId);
-    }
-
+    private PaymentStatus paymentStatus;
 }
 
Index: src/main/java/com/example/skychasemk/dto/ReviewDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/ReviewDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/ReviewDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,72 +1,19 @@
 package com.example.skychasemk.dto;
+
+import com.example.skychasemk.enums.TargetType;
+import lombok.Data;
 
 import java.time.LocalDate;
 
+@Data
 public class ReviewDTO {
-
-    private Integer reviewID;
-    private Integer userID;
-    private Integer targetID;
+    private Long reviewId;
+    private Long userId;
+    private Long bookingId;
+    private Integer targetId;
+    private TargetType targetType;
     private String reviewComment;
     private Integer rating;
     private LocalDate date;
-    private String flightNumber;
-
-    public String getFlightNumber() {
-        return flightNumber;
-    }
-
-    public void setFlightNumber(String flightNumber) {
-        this.flightNumber = flightNumber;
-    }
-
-    // Getters and Setters
-    public Integer getReviewID() {
-        return reviewID;
-    }
-
-    public void setReviewID(Integer reviewID) {
-        this.reviewID = reviewID;
-    }
-
-    public Integer getUserID() {
-        return userID;
-    }
-
-    public void setUserID(Integer userID) {
-        this.userID = userID;
-    }
-
-    public Integer getTargetID() {
-        return targetID;
-    }
-
-    public void setTargetID(Integer targetID) {
-        this.targetID = targetID;
-    }
-
-    public String getReviewComment() {
-        return reviewComment;
-    }
-
-    public void setReviewComment(String reviewComment) {
-        this.reviewComment = reviewComment;
-    }
-
-    public Integer getRating() {
-        return rating;
-    }
-
-    public void setRating(Integer rating) {
-        this.rating = rating;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
-    }
 }
 
Index: src/main/java/com/example/skychasemk/dto/SupportTicketDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/SupportTicketDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/SupportTicketDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,4 +1,6 @@
 package com.example.skychasemk.dto;
 
+import com.example.skychasemk.enums.TicketStatus;
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
@@ -6,11 +8,9 @@
 import java.time.LocalDate;
 
+@Data
 public class SupportTicketDTO {
 
-    // Getters and Setters
-    @Setter
-    @Getter
-    private Integer ticketID;
-    private Integer userId;
+    private Long ticketId;
+    private Long userId;
     private String subject;
     private String description;
@@ -18,67 +18,5 @@
     private LocalDate dateCreated;
     private LocalDate dateResolved;
-    private Integer assignedTo;
-
-    public enum TicketStatus {
-        Open,
-        InProgress,
-        Resolved
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public TicketStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(TicketStatus status) {
-        this.status = status;
-    }
-
-    public LocalDate getDateCreated() {
-        return dateCreated;
-    }
-
-    public void setDateCreated(LocalDate dateCreated) {
-        this.dateCreated = dateCreated;
-    }
-
-    public LocalDate getDateResolved() {
-        return dateResolved;
-    }
-
-    public void setDateResolved(LocalDate dateResolved) {
-        this.dateResolved = dateResolved;
-    }
-
-    public Integer getAssignedTo() {
-        return assignedTo;
-    }
-
-    public void setAssignedTo(Integer assignedTo) {
-        this.assignedTo = assignedTo;
-    }
+    private Long assignedTo;
 }
 
Index: src/main/java/com/example/skychasemk/dto/WishlistDTO.java
===================================================================
--- src/main/java/com/example/skychasemk/dto/WishlistDTO.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/dto/WishlistDTO.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,30 +1,21 @@
 package com.example.skychasemk.dto;
 
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.time.LocalDate;
+
+@Data
 public class WishlistDTO {
+    private Long wishlistId;
+    private Long userId;
+    private Integer targetId;
+    private LocalDate dateAdded;
+    private boolean wishlisted;
+    private String targetType;
 
-    private Integer userId;
-    private Integer targetId;
-    @Setter
-    @Getter
-    private boolean wishlisted;
-
-    public Integer getUserID() {
-        return userId;
+    public String getTargetType() {
+        return  targetType;
     }
-
-    public void setUserID(Integer userID) {
-        this.userId = userID;
-    }
-
-    public Integer getTargetID() {
-        return targetId;
-    }
-
-    public void setTargetID(Integer targetID) {
-        this.targetId = targetID;
-    }
-
 }
Index: src/main/java/com/example/skychasemk/enums/NotificationType.java
===================================================================
--- src/main/java/com/example/skychasemk/enums/NotificationType.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/enums/NotificationType.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,7 @@
+package com.example.skychasemk.enums;
+
+public enum NotificationType {
+    BookingConfirmation,
+    FlightDelay,
+    GeneralUpdate
+}
Index: src/main/java/com/example/skychasemk/enums/PaymentMethod.java
===================================================================
--- src/main/java/com/example/skychasemk/enums/PaymentMethod.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/enums/PaymentMethod.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,7 @@
+package com.example.skychasemk.enums;
+
+public enum PaymentMethod {
+    Credit,
+    Debit,
+    PayPal
+}
Index: src/main/java/com/example/skychasemk/enums/PaymentStatus.java
===================================================================
--- src/main/java/com/example/skychasemk/enums/PaymentStatus.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/enums/PaymentStatus.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,7 @@
+package com.example.skychasemk.enums;
+
+public enum PaymentStatus {
+    Success,
+    Failed,
+    Processing
+}
Index: src/main/java/com/example/skychasemk/enums/TargetType.java
===================================================================
--- src/main/java/com/example/skychasemk/enums/TargetType.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/enums/TargetType.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,7 @@
+package com.example.skychasemk.enums;
+
+public enum TargetType {
+    Flight,
+    Destination,
+    Airport
+}
Index: src/main/java/com/example/skychasemk/enums/TicketStatus.java
===================================================================
--- src/main/java/com/example/skychasemk/enums/TicketStatus.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/enums/TicketStatus.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,7 @@
+package com.example.skychasemk.enums;
+
+public enum TicketStatus {
+    Open,
+    InProgress,
+    Resolved
+}
Index: src/main/java/com/example/skychasemk/model/Administrator.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Administrator.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Administrator.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,14 +3,24 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
+import java.util.List;
+
+@Data
+@NoArgsConstructor
 @Entity
-@Data
-@Table(name="administrator")
+@Table(name = "administrator")
 public class Administrator {
+
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "adminId")
+    @Column(name = "admin_id")
     private Long adminId;
-    @Column(name="email", unique=true, nullable = false)
+
+    @Column(name = "email", unique = true, nullable = false)
     private String email;
+
+    // 1-M relationship: An Administrator can handle multiple SupportTickets
+    @OneToMany(mappedBy = "administrator")
+    private List<SupportTicket> supportTickets;
 }
Index: src/main/java/com/example/skychasemk/model/Airport.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Airport.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Airport.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,8 +1,15 @@
 package com.example.skychasemk.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
+import java.util.List;
+
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="airport")
+@Table(name = "airport")
 public class Airport {
 
@@ -10,57 +17,26 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "airportid")
-    private Integer airportID;
-    @Column(name = "name")
+    private Integer id;
 
+    @Column(name = "name", nullable = false)
     private String name;
-    @Column(name = "city")
 
-    private Integer city;
-    @Column(name = "country")
+    @Column(name = "country", nullable = false)
+    private String country;
 
-    private String country;
-    @Column(name = "code")
-
+    @Column(name = "code", nullable = false, length = 5)
     private String code;
 
-    // Getters and Setters
-    public Integer getAirportID() {
-        return airportID;
-    }
+    @ManyToOne
+    @JoinColumn(name = "destinationid", referencedColumnName = "destinationid")
+    @JsonIgnore
+    private Destination destination;
 
-    public void setAirportID(Integer airportID) {
-        this.airportID = airportID;
-    }
+    @OneToMany(mappedBy = "departureAirport")
+    @JsonIgnore
+    private List<Flight> departures;
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getCity() {
-        return city;
-    }
-
-    public void setCity(Integer city) {
-        this.city = city;
-    }
-
-    public String getCountry() {
-        return country;
-    }
-
-    public void setCountry(String country) {
-        this.country = country;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
+    @OneToMany(mappedBy = "arrivalAirport")
+    @JsonIgnore
+    private List<Flight> arrivals;
 }
Index: src/main/java/com/example/skychasemk/model/ApplicationUser.java
===================================================================
--- src/main/java/com/example/skychasemk/model/ApplicationUser.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/ApplicationUser.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,13 +1,17 @@
 package com.example.skychasemk.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.time.Instant;
 import java.time.LocalDate;
+import java.util.List;
 
 @Entity
 @Data
-@Table(name="application_user")
+@NoArgsConstructor
+@Table(name = "applicationuser")
 public class ApplicationUser {
 
@@ -15,25 +19,25 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "userid")
+    private Long userId;
 
-    private Long userid;
-    @Column(name = "name")
+    @Column(name = "name", nullable = false)
+    private String name;
 
-    private String name;
-    @Column(name = "surname")
-
+    @Column(name = "surname", nullable = false)
     private String surname;
 
-    @Column(name="email")
+    @Column(name = "email", nullable = false, unique = true)
     private String email;
-    @Column(name = "password")
 
+    @Column(name = "password", nullable = false)
     private String password;
-    @Column(name = "phone_number")
 
-    private String phone_number;
+    @Column(name = "phonenumber")
+    private String phoneNumber;
 
-    @Column(name = "date_joined")
+    @Column(name = "datejoined")
     private LocalDate dateJoined;
 
+    // Automatically set dateJoined on creation
     @PrePersist
     protected void onCreate() {
@@ -41,6 +45,132 @@
     }
 
+    // 1-M relationships
+    @OneToMany(mappedBy = "user")
+    @JsonManagedReference
+    private List<Booking> bookings;
+
+    @OneToMany(mappedBy = "user")
+    @JsonIgnore
+    private List<Review> reviews;
+
+    @OneToMany(mappedBy = "user")
+    @JsonIgnore
+    private List<Payment> payments;
+
+    @OneToMany(mappedBy = "user")
+    @JsonIgnore
+    private List<Wishlist> wishlistItems;
+
+    @OneToMany(mappedBy = "user")
+    @JsonIgnore
+    private List<Notification> notifications;
+
+    @OneToMany(mappedBy = "user")
+    @JsonIgnore
+    private List<SupportTicket> supportTickets;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSurname() {
+        return surname;
+    }
+
+    public void setSurname(String surname) {
+        this.surname = surname;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
     public void setPhoneNumber(String phoneNumber) {
-        this.phone_number = phoneNumber;
+        this.phoneNumber = phoneNumber;
     }
+
+    public LocalDate getDateJoined() {
+        return dateJoined;
+    }
+
+    public void setDateJoined(LocalDate dateJoined) {
+        this.dateJoined = dateJoined;
+    }
+
+    public List<Booking> getBookings() {
+        return bookings;
+    }
+
+    public void setBookings(List<Booking> bookings) {
+        this.bookings = bookings;
+    }
+
+    public List<Review> getReviews() {
+        return reviews;
+    }
+
+    public void setReviews(List<Review> reviews) {
+        this.reviews = reviews;
+    }
+
+    public List<Payment> getPayments() {
+        return payments;
+    }
+
+    public void setPayments(List<Payment> payments) {
+        this.payments = payments;
+    }
+
+    public List<Wishlist> getWishlistItems() {
+        return wishlistItems;
+    }
+
+    public void setWishlistItems(List<Wishlist> wishlistItems) {
+        this.wishlistItems = wishlistItems;
+    }
+
+    public List<Notification> getNotifications() {
+        return notifications;
+    }
+
+    public void setNotifications(List<Notification> notifications) {
+        this.notifications = notifications;
+    }
+
+    public List<SupportTicket> getSupportTickets() {
+        return supportTickets;
+    }
+
+    public void setSupportTickets(List<SupportTicket> supportTickets) {
+        this.supportTickets = supportTickets;
+    }
+
 }
Index: src/main/java/com/example/skychasemk/model/BestValueFlight.java
===================================================================
--- src/main/java/com/example/skychasemk/model/BestValueFlight.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/model/BestValueFlight.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,32 @@
+package com.example.skychasemk.model;
+
+import jakarta.persistence.*;
+import java.math.BigDecimal;
+
+@Entity
+@Table(name = "v_best_value_flights")
+public class BestValueFlight {
+
+    @Id
+    @Column(name = "flightid")
+    private Long flightID;
+
+    @Column(name = "flightnumber")
+    private String flightNumber;
+
+    @Column(name = "price")
+    private BigDecimal price;
+
+    @Column(name = "avgrating")
+    private Double avgRating;
+
+    // Getters and setters
+    public Long getFlightID() { return flightID; }
+    public void setFlightID(Long flightID) { this.flightID = flightID; }
+    public String getFlightNumber() { return flightNumber; }
+    public void setFlightNumber(String flightNumber) { this.flightNumber = flightNumber; }
+    public BigDecimal getPrice() { return price; }
+    public void setPrice(BigDecimal price) { this.price = price; }
+    public Double getAvgRating() { return avgRating; }
+    public void setAvgRating(Double avgRating) { this.avgRating = avgRating; }
+}
Index: src/main/java/com/example/skychasemk/model/Booking.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Booking.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Booking.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,4 +1,8 @@
 package com.example.skychasemk.model;
 
+import com.example.skychasemk.dto.BookingDTO;
+import com.example.skychasemk.enums.PaymentStatus;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
 import lombok.Getter;
@@ -7,4 +11,6 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
 
 @Entity
@@ -14,105 +20,101 @@
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "bookingid")
+    private Integer bookingID;
 
-    private Integer bookingId;
-    @Column(name = "userid")
+    @ManyToOne
+    @JoinColumn(name = "userID")
+    @JsonBackReference
+    private ApplicationUser user;
 
-    private Integer userId;
-
-    @Column(name = "booking_date")
-
-    private LocalDate booking_date;
-
-    @Column(name = "payment_status")
+    @Column(name="bookingdate")
+    private LocalDateTime bookingDate;
 
     @Enumerated(EnumType.STRING)
-    private payment_status status;
-    @Column(name = "total_cost")
+    @Column(name="paymentstatus")
+    private PaymentStatus paymentStatus;
 
-    private BigDecimal total_cost;
-    @Column(name = "seat_number")
+    @Column(name="totalcost")
+    private BigDecimal totalCost;
 
-    private Integer seat_number;
+    @ManyToMany
+    @JoinTable(
+            name = "booking_flight",
+            joinColumns = @JoinColumn(name = "bookingID"),
+            inverseJoinColumns = @JoinColumn(name = "flightID")
+    )
+    @JsonIgnore
+    private List<Flight> flights;
 
-    @Column(name = "flightid")
-    private Integer flightId;
+    @OneToOne(mappedBy = "booking")
+    @JsonBackReference
+    private Payment payment;
 
-    public Integer getFlightId() {
-        return flightId;
+    @OneToMany(mappedBy = "booking")
+    @JsonIgnore
+    private List<Review> reviews;
+
+    public Integer getBookingID() {
+        return bookingID;
     }
 
-    public void setFlightId(Integer flightId) {
-        this.flightId = flightId;
+    public void setBookingID(Integer bookingID) {
+        this.bookingID = bookingID;
     }
 
-    public enum payment_status {
-        PENDING,
-        COMPLETED,
-        CANCELLED
+    public ApplicationUser getUser() {
+        return user;
     }
 
-    public LocalDate getBookingDate() {
-        return booking_date;
+    public void setUser(ApplicationUser user) {
+        this.user = user;
     }
 
-    public Integer getBookingId() {
-        return bookingId;
+    public LocalDateTime getBookingDate() {
+        return bookingDate;
     }
 
-    public void setBookingId(Integer bookingID) {
-        this.bookingId = bookingID;
+    public void setBookingDate(LocalDateTime bookingDate) {
+        this.bookingDate = bookingDate;
     }
 
-    public Integer getUserId() {
-        return userId;
+    public PaymentStatus getPaymentStatus() {
+        return paymentStatus;
     }
 
-    public void setUserId(Integer userId) {
-        this.userId = userId;
+    public void setPaymentStatus(PaymentStatus paymentStatus) {
+        this.paymentStatus = paymentStatus;
     }
 
-    public LocalDate getBooking_date() {
-        return booking_date;
+    public BigDecimal getTotalCost() {
+        return totalCost;
     }
 
-    public void setBooking_date(LocalDate booking_date) {
-        this.booking_date = booking_date;
+    public void setTotalCost(BigDecimal totalCost) {
+        this.totalCost = totalCost;
     }
 
-    public payment_status getStatus() {
-        return status;
+    public List<Flight> getFlights() {
+        return flights;
     }
 
-    public void setStatus(payment_status status) {
-        this.status = status;
+    public void setFlights(List<Flight> flights) {
+        this.flights = flights;
     }
 
-    public BigDecimal getTotal_cost() {
-        return total_cost;
+    public Payment getPayment() {
+        return payment;
     }
 
-    public void setTotal_cost(BigDecimal total_cost) {
-        this.total_cost = total_cost;
+    public void setPayment(Payment payment) {
+        this.payment = payment;
     }
 
-    public Integer getSeat_number() {
-        return seat_number;
+    public List<Review> getReviews() {
+        return reviews;
     }
 
-    public void setSeat_number(Integer seat_number) {
-        this.seat_number = seat_number;
+    public void setReviews(List<Review> reviews) {
+        this.reviews = reviews;
     }
 
-    public void setBookingDate(LocalDate bookingDate) {
-        this.booking_date = bookingDate;
-    }
-
-    public Integer getSeatNumber() {
-        return seat_number;
-    }
-
-    public void setSeatNumber(Integer seat_number) {
-        this.seat_number = seat_number;
-    }
 }
Index: src/main/java/com/example/skychasemk/model/BookingFlight.java
===================================================================
--- src/main/java/com/example/skychasemk/model/BookingFlight.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/model/BookingFlight.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,61 @@
+package com.example.skychasemk.model;
+
+
+import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@NoArgsConstructor
+@Table(name = "booking_flight")
+public class BookingFlight {
+
+    @EmbeddedId
+    private BookingFlightId id;
+
+    @ManyToOne
+    @MapsId("bookingId")
+    @JoinColumn(name = "bookingid")
+    private Booking booking;
+
+    @ManyToOne
+    @MapsId("flightId")
+    @JoinColumn(name = "flightid")
+    private Flight flight;
+
+    @Column(name = "seat_number")
+    private Integer seatNumber;
+
+    public BookingFlightId getId() {
+        return id;
+    }
+
+    public void setId(BookingFlightId id) {
+        this.id = id;
+    }
+
+    public Booking getBooking() {
+        return booking;
+    }
+
+    public void setBooking(Booking booking) {
+        this.booking = booking;
+    }
+
+    public Flight getFlight() {
+        return flight;
+    }
+
+    public void setFlight(Flight flight) {
+        this.flight = flight;
+    }
+
+    public Integer getSeatNumber() {
+        return seatNumber;
+    }
+
+    public void setSeatNumber(Integer seatNumber) {
+        this.seatNumber = seatNumber;
+    }
+}
Index: src/main/java/com/example/skychasemk/model/BookingFlightId.java
===================================================================
--- src/main/java/com/example/skychasemk/model/BookingFlightId.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/model/BookingFlightId.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,20 @@
+package com.example.skychasemk.model;
+
+import jakarta.persistence.Embeddable;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Embeddable
+@Data
+public class BookingFlightId implements Serializable {
+    private Integer bookingId;
+    private Integer flightId;
+
+    public BookingFlightId() {}
+
+    public BookingFlightId(Integer bookingID, Integer flightID) {
+        this.bookingId = bookingID;
+        this.flightId=flightID;
+    }
+}
Index: src/main/java/com/example/skychasemk/model/Destination.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Destination.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Destination.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,88 +1,44 @@
 package com.example.skychasemk.model;
 
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.List;
 
 @Entity
-@Table(name="destination")
+@Data
+@NoArgsConstructor
+@Table(name = "destination")
 public class Destination {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "destinationid")
+    @Column(name = "destinationid") // matches DB
+    private Integer destinationId;
 
-    private Integer destinationID;
-    @Column(name = "name")
+    @Column(name = "name", nullable = false)
+    private String name;
 
-    private String name;
-    @Column(name = "country")
+    @Column(name = "country", nullable = false)
+    private String country;
 
-    private String country;
-    @Column(name = "description")
+    @Column(name = "description", columnDefinition = "TEXT")
+    private String description;
 
-    private String description;
-    @Column(name = "popular_attraction")
+    @Column(name = "popularattraction", columnDefinition = "TEXT")
+    private String popularAttraction;
 
-    private String popularAttraction;
-    @Column(name = "best_time_to_visit")
-
+    @Column(name = "besttimetovisit")
     private String bestTimeToVisit;
 
-    public Integer getDestinationID() {
-        return destinationID;
-    }
+    // 1-M relationship: One Destination can have many Airports
+    @OneToMany(mappedBy = "destination", cascade = CascadeType.ALL, orphanRemoval = true)
+    @JsonManagedReference
+    private List<Airport> airports;
 
-    public void setDestinationID(Integer destinationID) {
-        this.destinationID = destinationID;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCountry() {
-        return country;
-    }
-
-    public void setCountry(String country) {
-        this.country = country;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getPopularAttraction() {
-        return popularAttraction;
-    }
-
-    public void setPopularAttraction(String popularAttraction) {
-        this.popularAttraction = popularAttraction;
-    }
-
-    public String getBestTimeToVisit() {
-        return bestTimeToVisit;
-    }
-
-    public void setBestTimeToVisit(String bestTimeToVisit) {
-        this.bestTimeToVisit = bestTimeToVisit;
-    }
-
-    public static Integer getAirportID(String cityName, List<Destination> destinations) {
-        for (Destination destination : destinations) {
-            if (destination.getName().equalsIgnoreCase(cityName)) {
-                return destination.getDestinationID();
-            }
-        }
-        return null;
-    }
+    // M-N relationship: Wishlist includes Destinations
+    @ManyToMany(mappedBy = "wishlistDestinations")
+    private List<Wishlist> wishlists;
 }
Index: src/main/java/com/example/skychasemk/model/Flight.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Flight.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Flight.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,58 +1,55 @@
 package com.example.skychasemk.model;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.LocalTime;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
-@Setter
-@Getter
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="Flight")
+@Table(name = "flight")
 public class Flight {
 
-    // Getters and Setters
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "FlightID")
-    private Long flightID;
-    @Column(name = "flight_number")
+    private Integer flightID;
 
+    @Column(name = "flightnumber")
     private String flightNumber;
-    @Column(name = "departure_airport")
 
-    private Integer departureAirport;
-    @Column(name = "arrival_airport")
+    @ManyToOne
+    @JoinColumn(name = "departureairportid")
+    private Airport departureAirport;
 
-    private Integer arrivalAirport;
-    @Column(name = "departure_time")
+    @ManyToOne
+    @JoinColumn(name = "arrivalairportid")
+    private Airport arrivalAirport;
 
-    private LocalTime departureTime;
-    @Column(name = "arrival_time")
-
-    private LocalTime arrivalTime;
-    @Column(name = "Price")
-
-    private BigDecimal price;
-    @Column(name = "available_seats")
-
-    private Integer availableSeats;
-    @Column(name = "departure_date")
-
+    @Column(name = "departuredate")
     private LocalDate departureDate;
 
-    @Column(name="return_date")
+    @Column(name = "returndate")
     private LocalDate returnDate;
 
-    @OneToMany(mappedBy = "flightId", fetch = FetchType.LAZY)
-    @JsonIgnore
+    @Column(name="price")
+    private BigDecimal price;
+
+    @Column(name="availableseats")
+    private Integer availableSeats;
+
+    // Bookings relationship
+    @ManyToMany(mappedBy = "flights")
     private List<Booking> bookings;
 
-    public Flight(){}
+    // Wishlist relationship
+    @ManyToMany(mappedBy = "flights")
+    private Set<Wishlist> wishlists = new HashSet<>();
 
 }
Index: src/main/java/com/example/skychasemk/model/Notification.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Notification.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Notification.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,12 +1,15 @@
 package com.example.skychasemk.model;
 
+import com.example.skychasemk.enums.NotificationType;
 import jakarta.persistence.*;
-import lombok.Getter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
-@Getter
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="notification")
+@Table(name = "notification")
 public class Notification {
 
@@ -14,44 +17,18 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "notificationid")
+    private Integer notificationID;
 
-    private Integer notificationID;
-    @Column(name = "userid")
+    @ManyToOne
+    @JoinColumn(name = "userid")
+    private ApplicationUser user;
 
-    private Integer userId;
     @Column(name = "message")
-
     private String message;
-    @Column(name = "type")
 
     @Enumerated(EnumType.STRING)
-    private Type type;
-    @Column(name = "date_sent")
+    @Column(name="type")
+    private NotificationType type;
 
-    private LocalDate dateSent;
-
-    public enum Type {
-        BOOKING_CONFIRMATION,
-        FLIGHT_DELAY,
-        GENERAL_UPDATE
-    }
-
-    public void setNotificationID(Integer notificationID) {
-        this.notificationID = notificationID;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public void setType(Type type) {
-        this.type = type;
-    }
-
-    public void setDateSent(LocalDate dateSent) {
-        this.dateSent = dateSent;
-    }
+    @Column(name = "datesent")
+    private LocalDateTime dateSent;
 }
Index: src/main/java/com/example/skychasemk/model/Payment.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Payment.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Payment.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,77 +1,48 @@
 package com.example.skychasemk.model;
 
+import com.example.skychasemk.enums.PaymentMethod;
+import com.example.skychasemk.enums.PaymentStatus;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
-@Getter
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="Payment")
+@Table(name = "payment")
 public class Payment {
 
-    @Setter
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "PaymentID")
-
+    @Column(name = "paymentid")
     private Integer paymentID;
 
-    //@Column(name = "bookingId")
-    @Setter
-    @Column(name="bookingid")
-    private Integer bookingId;
-    @Getter
-    @Column(name = "userid")
+    @OneToOne
+    @JoinColumn(name = "bookingid")
+    @JsonBackReference
+    private Booking booking;
 
-    private Integer userId;
-    @Setter
-    @Column(name = "payment_method")
+    @ManyToOne
+    @JoinColumn(name = "userid")
+    @JsonIgnore
+    private ApplicationUser user;
 
     @Enumerated(EnumType.STRING)
-    private PaymentMethod method;
-    @Setter
-    @Column(name = "Amount")
+    @Column(name = "paymentmethod")
+    private PaymentMethod paymentMethod;
 
+    @Column(name = "amount")
     private BigDecimal amount;
-    @Setter
-    @Getter
-    @Column(name = "transaction_date")
 
-    private LocalDate transactionDate;
-    @Setter
-    @Getter
-    @Column(name = "payment_status")
+    @Column(name = "transactiondate")
+    private LocalDateTime transactionDate;
 
     @Enumerated(EnumType.STRING)
-    private PaymentStatus status;
-
-
-    public enum PaymentStatus {
-        PENDING,
-        COMPLETED,
-        CANCELLED
-    }
-
-    public enum PaymentMethod {
-        PAYPAL,
-        DEBIT,
-        CREDIT
-    }
-
-    public Integer getBookingID() {
-        return bookingId;
-    }
-
-    public void setUserID(Integer userId) {
-        this.userId = userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = Math.toIntExact(userId);
-    }
-
+    @Column(name = "paymentstatus")
+    private PaymentStatus paymentStatus;
 }
-
Index: src/main/java/com/example/skychasemk/model/Review.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Review.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Review.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,9 +1,15 @@
 package com.example.skychasemk.model;
 
+import com.example.skychasemk.enums.TargetType;
 import jakarta.persistence.*;
-import java.time.LocalDate;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="review")
+@Table(name = "review")
 public class Review {
 
@@ -11,70 +17,32 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "reviewid")
+    private Integer reviewID;
 
-    private Integer reviewID;
-    @Column(name = "userid")
+    @ManyToOne
+    @JoinColumn(name = "userid")
+    private ApplicationUser user;
 
-    private Integer userID;
-    @Column(name = "targetid")
+    @ManyToOne
+    @JoinColumn(name = "bookingid")
+    private Booking booking;
 
+    @Column(name="targetid")
     private Integer targetID;
-    @Column(name = "review_comment")
 
+    @Enumerated(EnumType.STRING)
+    @Column(name="targettype")
+    private TargetType targetType;
+
+    @Column(name = "reviewcomment")
     private String reviewComment;
-    @Column(name = "rating")
 
+    @Column(name="rating")
     private Integer rating;
-    @Column(name = "date")
 
-    private LocalDate date;
+    @Column(name="date")
+    private LocalDateTime date;
 
-    // Getters and Setters
-    public Integer getReviewID() {
-        return reviewID;
-    }
-
-    public void setReviewID(Integer reviewID) {
-        this.reviewID = reviewID;
-    }
-
-    public Integer getUserID() {
-        return userID;
-    }
-
-    public void setUserID(Integer userID) {
-        this.userID = userID;
-    }
-
-    public Integer getTargetID() {
-        return targetID;
-    }
-
-    public void setTargetID(Integer targetID) {
-        this.targetID = targetID;
-    }
-
-    public String getReviewComment() {
-        return reviewComment;
-    }
-
-    public void setReviewComment(String reviewComment) {
-        this.reviewComment = reviewComment;
-    }
-
-    public Integer getRating() {
-        return rating;
-    }
-
-    public void setRating(Integer rating) {
-        this.rating = rating;
-    }
-
-    public LocalDate getDate() {
-        return date;
-    }
-
-    public void setDate(LocalDate date) {
-        this.date = date;
+    public void setTargetId(Long flightId) {
+        this.targetID= Math.toIntExact(flightId);
     }
 }
-
Index: src/main/java/com/example/skychasemk/model/SupportTicket.java
===================================================================
--- src/main/java/com/example/skychasemk/model/SupportTicket.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/SupportTicket.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,12 +1,15 @@
 package com.example.skychasemk.model;
 
+import com.example.skychasemk.enums.TicketStatus;
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="supportticket")
+@Table(name = "supportticket")
 public class SupportTicket {
 
@@ -14,54 +17,29 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "ticketid")
-    private Integer ticketId;
+    private Integer ticketID;
 
-    public Integer getTicketId() {
-        return ticketId;
-    }
+    @ManyToOne
+    @JoinColumn(name = "userid")
+    private ApplicationUser user;
 
-    public void setTicketId(Integer ticketId) {
-        this.ticketId = ticketId;
-    }
+    @Column(name="subject")
+    private String subject;
 
-    @Setter
-    @Getter
-    @Column(name = "userid")
+    @Column(name = "description")
+    private String description;
 
-    private Integer userId;
+    @Enumerated(EnumType.STRING)
+    @Column(name="status")
+    private TicketStatus status;
 
-    @Setter
-    @Getter
-    @Column(name = "Description")
+    @Column(name = "datecreated")
+    private LocalDateTime dateCreated;
 
-    private String description;
-    @Setter
+    @Column(name = "dateresolved")
+    private LocalDateTime dateResolved;
 
-    @Getter
-    @Column(name = "status")
-    @Enumerated(EnumType.STRING)
-    private TicketStatus status;
-    @Setter
-    @Column(name = "date_created")
-
-    private LocalDate dateCreated;
-    @Setter
-    @Getter
-    @Column(name = "date_resolved")
-
-    private LocalDate dateResolved;
-    @Setter
-    @Column(name = "assigned_to")
-
-    private Integer assignedTo;
-
-    public enum TicketStatus {
-        OPEN,
-        RESOLVED;
-    }
-
-
-    public LocalDate getDateCreated(LocalDate now) {
-        return dateCreated;
-    }
+    @ManyToOne
+    @JoinColumn(name = "assignedto")
+    private Administrator administrator;
 
 }
Index: c/main/java/com/example/skychasemk/model/TopMonthlyReport.java
===================================================================
--- src/main/java/com/example/skychasemk/model/TopMonthlyReport.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,29 +1,0 @@
-package com.example.skychasemk.model;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.annotations.Immutable;
-
-import java.time.LocalDate;
-@Setter
-@Getter
-@Entity
-@Table(name="topmonhtlyreport")
-@IdClass(TopMonthlyReportId.class) // Define composite key
-
-public class TopMonthlyReport {
-    // Getters and Setters
-    @Id
-    @Column(name = "month")
-    private LocalDate month;
-    @Id
-    @Column(name = "category")
-    private String category;
-    @Id
-    @Column(name = "name")
-    private String name;
-    @Column(name = "count")
-    private int count;
-
-}
Index: c/main/java/com/example/skychasemk/model/TopMonthlyReportId.java
===================================================================
--- src/main/java/com/example/skychasemk/model/TopMonthlyReportId.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,34 +1,0 @@
-package com.example.skychasemk.model;
-
-import java.io.Serializable;
-import java.time.LocalDate;
-import java.util.Objects;
-
-public class TopMonthlyReportId implements Serializable {
-    private LocalDate month;
-    private String category;
-    private String name;
-
-    public TopMonthlyReportId() {}
-
-    public TopMonthlyReportId(LocalDate month, String category, String name) {
-        this.month = month;
-        this.category = category;
-        this.name = name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        TopMonthlyReportId that = (TopMonthlyReportId) o;
-        return Objects.equals(month, that.month) &&
-                Objects.equals(category, that.category) &&
-                Objects.equals(name, that.name);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(month, category, name);
-    }
-}
Index: c/main/java/com/example/skychasemk/model/WebConfig.java
===================================================================
--- src/main/java/com/example/skychasemk/model/WebConfig.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,41 +1,0 @@
-package com.example.skychasemk.model;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class WebConfig implements WebMvcConfigurer {
-
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        // Allow cross-origin requests from your frontend
-        registry.addMapping("/**")
-                .allowedOrigins("http://localhost:8080")
-                .allowedMethods("GET", "POST", "PUT", "DELETE")
-                .allowedHeaders("*")
-                .allowCredentials(true);
-    }
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-        registry.addResourceHandler("/**")
-                .addResourceLocations("classpath:/static/");
-    }
-    @Override
-    public void addViewControllers(ViewControllerRegistry registry) {
-        registry.addViewController("/admin").setViewName("forward:/AdminLogin.html");
-        registry.addViewController("/flights").setViewName("forward:/FlightSearch.html");
-        registry.addViewController("/my-reservations").setViewName("forward:/MyReservations.html");
-        registry.addViewController("/reviews").setViewName("forward:/ReviewPage.html");
-        registry.addViewController("/support-tickets").setViewName("forward:/SupportTickets.html");
-        registry.addViewController("/transaction").setViewName("forward:/TransactionPage.html");
-        registry.addViewController("/login").setViewName("forward:/UserLogin.html");
-        registry.addViewController("/wishlists").setViewName("forward:/Wishlist.html");
-        registry.addViewController("/signup").setViewName("forward:/UserSignup.html");
-        registry.addViewController("/views").setViewName("forward:/ViewReport.html");
-    }
-
-}
Index: src/main/java/com/example/skychasemk/model/Wishlist.java
===================================================================
--- src/main/java/com/example/skychasemk/model/Wishlist.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/model/Wishlist.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,33 +2,47 @@
 
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
+@Data
+@NoArgsConstructor
 @Entity
-@Table(name="Wishlist")
+@Table(name = "wishlist")
 public class Wishlist {
 
-    @Getter
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    @Column(name = "WishlistID")
+    @Column(name = "wishlistid")
+    private Integer wishlistID;
 
-    private Integer wishlistID;
-    @Setter
-    @Column(name = "userid")
+    @ManyToOne
+    @JoinColumn(name = "userid")
+    private ApplicationUser user;
 
-    private Integer userId;
-    @Setter
     @Column(name = "targetid")
+    private Integer targetID;
 
-    private Integer targetId;
-    @Setter
-    @Getter
-    @Column(name = "date_added")
-    private LocalDate date_added;
+    @Column(name = "dateadded")
+    private LocalDateTime dateAdded;
 
+    @ManyToMany
+    @JoinTable(
+            name = "wishlist_flight",
+            joinColumns = @JoinColumn(name = "wishlistid"), // column in wishlist_flight referring to Wishlist
+            inverseJoinColumns = @JoinColumn(name = "flightid") // column in wishlist_flight referring to Flight
+    )
+    private Set<Flight> flights = new HashSet<>();
 
+    @ManyToMany
+    @JoinTable(
+            name = "wishlist_destination",
+            joinColumns = @JoinColumn(name = "wishlist_id"),
+            inverseJoinColumns = @JoinColumn(name = "destination_id")
+    )
+    private List<Destination> wishlistDestinations;
 }
-
Index: src/main/java/com/example/skychasemk/repository/AdministratorRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/AdministratorRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/repository/AdministratorRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,12 @@
+package com.example.skychasemk.repository;
+
+import com.example.skychasemk.model.Administrator;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface AdministratorRepository extends JpaRepository<Administrator, Long> {
+    Optional<Administrator> findByEmail(String email);
+}
Index: src/main/java/com/example/skychasemk/repository/AirportRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/AirportRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/AirportRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,7 +2,15 @@
 
 import com.example.skychasemk.model.Airport;
+import com.example.skychasemk.model.Destination;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
+import java.util.List;
+import java.util.Optional;
+
+@Repository
 public interface AirportRepository extends JpaRepository<Airport, Integer> {
-    // You can add custom queries here if needed
+    List<Airport> findByDestination(Destination destination);
+    Optional<Airport> findByCode(String code);
+    Optional<Airport> findByNameIgnoreCase(String name);
 }
Index: src/main/java/com/example/skychasemk/repository/ApplicationUserRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/ApplicationUserRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/ApplicationUserRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,6 +3,4 @@
 import com.example.skychasemk.model.ApplicationUser;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -11,7 +9,6 @@
 @Repository
 public interface ApplicationUserRepository extends JpaRepository<ApplicationUser, Long> {
-    @Query("SELECT u FROM ApplicationUser u WHERE u.userid = :id")
-    Optional<ApplicationUser> getUserById(@Param("id") Long userid);
-    @Query("SELECT u FROM ApplicationUser  u WHERE u.email=:email")
-    Optional<ApplicationUser> findByEmail(@Param("email") String email);
+    Optional<ApplicationUser> findByUserId(Long userId);
+    Optional<ApplicationUser> findByEmail(String email);
+    Optional<ApplicationUser> findByEmailAndPassword(String email, String password);
 }
Index: src/main/java/com/example/skychasemk/repository/BestValueFlightRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/BestValueFlightRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/repository/BestValueFlightRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,9 @@
+package com.example.skychasemk.repository;
+
+import com.example.skychasemk.model.BestValueFlight;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface BestValueFlightRepository extends JpaRepository<BestValueFlight, Long> {
+}
Index: src/main/java/com/example/skychasemk/repository/BookingFlightRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/BookingFlightRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/repository/BookingFlightRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,20 @@
+package com.example.skychasemk.repository;
+
+import com.example.skychasemk.model.BookingFlight;
+import com.example.skychasemk.model.BookingFlightId;
+import com.example.skychasemk.model.Flight;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface BookingFlightRepository extends JpaRepository<BookingFlight, BookingFlightId> {
+    List<BookingFlight> findByBooking_BookingID(Integer bookingId);
+    List<BookingFlight> findByFlight_FlightID(Integer flightId);
+
+    @Query("SELECT bf.flight FROM BookingFlight bf WHERE bf.booking.user.userId = :userId")
+    List<Flight> findFlightsByUserId(@Param("userId") Long userId);
+}
Index: src/main/java/com/example/skychasemk/repository/BookingRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/BookingRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/BookingRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -5,9 +5,19 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Optional;
 
+@Repository
 public interface BookingRepository extends JpaRepository<Booking, Integer> {
-    @Query("SELECT b.flightId FROM Booking b WHERE b.flightId=:flightId")
+    List<Booking> findByUser_UserId(Long userId);
+
+    @Query("SELECT b FROM Booking b JOIN b.flights f WHERE f.flightID = :flightId")
     List<Booking> findBookingsByFlightId(@Param("flightId") Integer flightId);
+
+    @Query("SELECT bf.booking FROM BookingFlight bf " +
+            "WHERE bf.booking.user.userId = :userId AND bf.flight.flightID = :flightId")
+    List<Booking> findBookingByUserIdAndFlightId(@Param("userId") Long userId,
+                                                     @Param("flightId") Long flightId);
 }
Index: src/main/java/com/example/skychasemk/repository/DestinationRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/DestinationRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/DestinationRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -4,11 +4,14 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Optional;
 
+@Repository
 public interface DestinationRepository extends JpaRepository<Destination, Integer> {
+    Optional<Destination> findByName(String name);
+
     @Query("SELECT d.name FROM Destination d")
     List<String> findAllCities();
-    //@Query("SELECT d.destinationID FROM Destination d")
-    Destination findByName(String departureCity);
 }
Index: src/main/java/com/example/skychasemk/repository/FlightRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/FlightRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/FlightRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,4 +1,5 @@
 package com.example.skychasemk.repository;
 
+import com.example.skychasemk.model.Airport;
 import com.example.skychasemk.model.Flight;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -9,15 +10,25 @@
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Optional;
 
 @Repository
-public interface FlightRepository extends JpaRepository<Flight, Long> {
+public interface FlightRepository extends JpaRepository<Flight, Integer> {
+    Optional<Flight> findByFlightID(Integer flightID);
 
-    @Query(value = "SELECT * FROM flight WHERE departure_airport = :departureID AND arrival_airport = :destinationID AND departure_date = :departureDate", nativeQuery = true)
-    List<Flight> findFlights(@Param("departureID") Integer departureID,
-                             @Param("destinationID") Integer destinationID,
-                             @Param("departureDate") LocalDate departureDate);
+    @Query("""
+        SELECT f FROM Flight f
+        WHERE f.departureAirport.id IN :departureIds
+          AND f.arrivalAirport.id IN :arrivalIds
+          AND f.departureDate = :departureDate
+          AND f.returnDate = :returnDate
+    """)
+    List<Flight> searchFlights(
+            @Param("departureIds") List<Integer> departureIds,
+            @Param("arrivalIds") List<Integer> arrivalIds,
+            @Param("departureDate") LocalDate departureDate,
+            @Param("returnDate") LocalDate returnDate
+    );
 
-
-    @Query(value="SELECT * FROM flight  WHERE flightId=:flightId",nativeQuery = true)
-    List<Flight> getFlightByFlightId(Long flightId);
+    List<Flight> findByDepartureAirportAndArrivalAirportAndDepartureDate(
+            Airport departureAirport, Airport arrivalAirport, LocalDate departureDate);
 }
Index: src/main/java/com/example/skychasemk/repository/MostPopularFlightsViewRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/MostPopularFlightsViewRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/repository/MostPopularFlightsViewRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,9 @@
+package com.example.skychasemk.repository;
+
+import com.example.skychasemk.views.MostPopularFlightsView;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface MostPopularFlightsViewRepository extends JpaRepository<MostPopularFlightsView, Integer> {
+}
Index: src/main/java/com/example/skychasemk/repository/NotificationRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/NotificationRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/NotificationRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,14 +2,16 @@
 
 import com.example.skychasemk.model.Notification;
-import com.example.skychasemk.model.Wishlist;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+@Repository
+public interface NotificationRepository extends JpaRepository<Notification, Integer> {
+    List<Notification> findByUser_UserId(Long userId);
 
-public interface NotificationRepository extends JpaRepository<Notification, Integer> {
-    @Query("SELECT n FROM Notification n WHERE n.userId = :userId")
-    List<Notification> findByUserId(@Param("userId") Integer userId);
+    @Query("SELECT n FROM Notification n WHERE n.user.userId = :userId")
+    List<Notification> findNotificationsByUserId(@Param("userId") Long userId);
 }
Index: src/main/java/com/example/skychasemk/repository/PaymentRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/PaymentRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/PaymentRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,16 +1,17 @@
 package com.example.skychasemk.repository;
 
+import com.example.skychasemk.model.Booking;
 import com.example.skychasemk.model.Payment;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Optional;
 
+@Repository
 public interface PaymentRepository extends JpaRepository<Payment, Integer> {
-    @Query("SELECT p FROM Payment p WHERE p.userId = :userId")
-    List<Payment> findByUserId(@Param("userID") Long userId);
+    List<Payment> findByUser_UserId(Long userId);
+    List<Payment> findByBooking_BookingID(Integer bookingId);
+
+    Optional<Payment> findByBooking(Booking booking);
 }
-
-
-
Index: src/main/java/com/example/skychasemk/repository/ReviewRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/ReviewRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/ReviewRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,18 +1,29 @@
 package com.example.skychasemk.repository;
 
-import com.example.skychasemk.model.Notification;
+import com.example.skychasemk.enums.TargetType;
 import com.example.skychasemk.model.Review;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
+@Repository
+public interface ReviewRepository extends JpaRepository<Review, Integer> {
 
-public interface ReviewRepository extends JpaRepository<Review, Integer> {
-    @Query("SELECT r from Review r where r.targetID = :flightId")
-    List<Review> findReviews(@Param("flightId") Integer flightId);
+    // Find reviews by flight
+    @Query("SELECT r FROM Review r WHERE r.targetID = :targetId AND r.targetType = 'FLIGHT'")
+    List<Review> findByFlightId(@Param("targetId") Integer flightId);
 
-    @Query("SELECT r FROM Review r WHERE r.userID = :userId")
+    // Find reviews by airport
+    @Query("SELECT r FROM Review r WHERE r.targetID = :targetId AND r.targetType = 'AIRPORT'")
+    List<Review> findByAirportId(@Param("targetId") Integer airportId);
+
+    // Reviews by User
+    @Query("SELECT r FROM Review r WHERE r.user.userId = :userId")
     List<Review> findByUserId(@Param("userId") Integer userId);
+
+
+    // Reviews by Booking
+    List<Review> findByBooking_BookingID(Integer bookingId);
 }
-
Index: src/main/java/com/example/skychasemk/repository/SupportTicketRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/SupportTicketRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/SupportTicketRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,15 +2,16 @@
 
 import com.example.skychasemk.model.SupportTicket;
-import org.springframework.data.jpa.repository.EntityGraph;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+@Repository
 public interface SupportTicketRepository extends JpaRepository<SupportTicket, Integer> {
-    @Query("SELECT s FROM SupportTicket s WHERE s.status='OPEN'")
-    List<SupportTicket> findTickets();
+    List<SupportTicket> findByUser_UserId(Long userId);
+    List<SupportTicket> findByAdministrator_AdminId(Long adminId);
 
-    @Query("SELECT s FROM SupportTicket s WHERE s.status='RESOLVED'")
+    @Query("SELECT s FROM SupportTicket s WHERE s.status = 'RESOLVED'")
     List<SupportTicket> findResolvedTickets();
 }
Index: c/main/java/com/example/skychasemk/repository/TopMonthlyReportRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/TopMonthlyReportRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,16 +1,0 @@
-package com.example.skychasemk.repository;
-
-import com.example.skychasemk.model.TopMonthlyReport;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-import java.time.LocalDate;
-import java.util.List;
-
-@Repository
-public interface TopMonthlyReportRepository extends JpaRepository<TopMonthlyReport, LocalDate> {
-    @Query("SELECT v FROM TopMonthlyReport v")
-    List<TopMonthlyReport> findAllRecords();
-
-}
Index: src/main/java/com/example/skychasemk/repository/WishlistRepository.java
===================================================================
--- src/main/java/com/example/skychasemk/repository/WishlistRepository.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/repository/WishlistRepository.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,14 +1,10 @@
 package com.example.skychasemk.repository;
 
-import com.example.skychasemk.dto.WishlistDTO;
-import com.example.skychasemk.model.Flight;
 import com.example.skychasemk.model.Wishlist;
 import jakarta.transaction.Transactional;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Repository;
 
@@ -19,16 +15,16 @@
 public interface WishlistRepository extends JpaRepository<Wishlist, Integer> {
 
-    @Query("SELECT w FROM Wishlist w WHERE w.targetId = :targetId AND w.userId = :userId")
-    Wishlist findByTargetIdAndUserId(Integer targetId, Integer userId);
+    @Query("SELECT w FROM Wishlist w WHERE w.targetID = :targetId AND w.user.userId = :userId")
+    Wishlist findByTargetIdAndUserId(@Param("targetId") Integer targetId, @Param("userId") Long userId);
 
-    @Query("SELECT w FROM Wishlist w WHERE w.userId = :userId")
+    @Query("SELECT w FROM Wishlist w WHERE w.user.userId = :userId")
     List<Wishlist> findWishlistByUserId(@Param("userId") Long userId);
 
     @Modifying
     @Transactional
-    @Query("DELETE FROM Wishlist w WHERE w.userId = :userId AND w.targetId = :targetId")
-    void deleteByUserIdAndTargetId(@Param("userId") Integer userId, @Param("targetId") Integer targetId);
+    @Query("DELETE FROM Wishlist w WHERE w.user.userId = :userId AND w.targetID = :targetId")
+    void deleteByUserIdAndTargetId(@Param("userId") Long userId, @Param("targetId") Integer targetId);
 
-    @Query("SELECT w.targetId FROM Wishlist w WHERE w.wishlistID = :wishlistId")
-    Optional<Wishlist> getFlightFromWishlist(@Param("wishlistId") Long wishlistId);
+    @Query("SELECT w.targetID FROM Wishlist w WHERE w.wishlistID = :wishlistId")
+    Optional<Integer> getFlightFromWishlist(@Param("wishlistId") Integer wishlistId);
 }
Index: src/main/java/com/example/skychasemk/services/AirportService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/AirportService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/AirportService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,44 +3,53 @@
 import com.example.skychasemk.model.Airport;
 import com.example.skychasemk.repository.AirportRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.Optional;
 
 @Service
 public class AirportService {
 
+    private final AirportRepository airportRepository;
+
     @Autowired
-    private AirportRepository airportRepository;
+    public AirportService(AirportRepository airportRepository) {
+        this.airportRepository = airportRepository;
+    }
 
-    // Get all airports
     public List<Airport> getAllAirports() {
         return airportRepository.findAll();
     }
 
-    // Get airport by ID
-    public Optional<Airport> getAirportById(Integer airportID) {
-        return airportRepository.findById(airportID);
+    public Airport getAirportById(Integer id) {
+        return airportRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Airport not found with id " + id));
     }
 
-    // Save new airport
+    @Transactional
     public Airport saveAirport(Airport airport) {
         return airportRepository.save(airport);
     }
 
-    // Update an airport
-    public Airport updateAirport(Integer airportID, Airport airport) {
-        if (airportRepository.existsById(airportID)) {
-            airport.setAirportID(airportID);
-            return airportRepository.save(airport);
-        } else {
-            throw new RuntimeException("Airport not found with id " + airportID);
-        }
+    @Transactional
+    public Airport updateAirport(Integer id, Airport airport) {
+        Airport existing = airportRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Airport not found with id " + id));
+
+        existing.setName(airport.getName());
+        existing.setCountry(airport.getCountry());
+        existing.setCode(airport.getCode());
+        existing.setDestination(airport.getDestination());
+
+        return airportRepository.save(existing);
     }
 
-    // Delete airport
-    public void deleteAirport(Integer airportID) {
-        airportRepository.deleteById(airportID);
+    @Transactional
+    public void deleteAirport(Integer id) {
+        if (!airportRepository.existsById(id)) {
+            throw new RuntimeException("Airport not found with id " + id);
+        }
+        airportRepository.deleteById(id);
     }
 }
Index: src/main/java/com/example/skychasemk/services/ApplicationUserService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/ApplicationUserService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/ApplicationUserService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -6,11 +6,8 @@
 import com.example.skychasemk.repository.ApplicationUserRepository;
 import jakarta.transaction.Transactional;
-import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Optional;
-//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
 
 @Service
@@ -19,6 +16,4 @@
     @Autowired
     private ApplicationUserRepository userRepository;
-
-    //private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 
     @Transactional
@@ -34,16 +29,20 @@
         user.setPassword(userDTO.getPassword());
         user.setPhoneNumber(userDTO.getPhone_number());
-        ApplicationUser savedUser = userRepository.save(user);
-        userRepository.flush();
-        return savedUser;
+
+        return userRepository.save(user);
     }
 
-    public ApplicationUser findByEmail(@Valid ApplicationUserLoginDTO userDTO) {
-        if (userRepository.findByEmail(userDTO.getEmail()).isEmpty()) {
-            throw new RuntimeException("User not registered");
-        } else {
-            Optional<ApplicationUser> userId = userRepository.findByEmail(userDTO.getEmail());
-            return userId.get();
+    public ApplicationUser loginUser(ApplicationUserLoginDTO loginDTO) {
+        ApplicationUser user = userRepository.findByEmail(loginDTO.getEmail())
+                .orElseThrow(() -> new RuntimeException("User not registered"));
+
+        if (!loginDTO.getPassword().equals(user.getPassword())) {
+            throw new RuntimeException("Invalid credentials");
         }
+        return user;
+    }
+
+    public Optional<ApplicationUser> findByEmail(String email) {
+        return userRepository.findByEmail(email);
     }
 }
Index: src/main/java/com/example/skychasemk/services/BestValueFlightService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/BestValueFlightService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/services/BestValueFlightService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,21 @@
+package com.example.skychasemk.service;
+
+import com.example.skychasemk.model.BestValueFlight;
+import com.example.skychasemk.repository.BestValueFlightRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class BestValueFlightService {
+
+    private final BestValueFlightRepository repository;
+
+    public BestValueFlightService(BestValueFlightRepository repository) {
+        this.repository = repository;
+    }
+
+    public List<BestValueFlight> getAllBestValueFlights() {
+        return repository.findAll();
+    }
+}
Index: src/main/java/com/example/skychasemk/services/BookingService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/BookingService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/BookingService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,51 +1,84 @@
 package com.example.skychasemk.services;
 
-import com.example.skychasemk.model.Booking;
-import com.example.skychasemk.repository.BookingRepository;
+import com.example.skychasemk.dto.BookingDTO;
+import com.example.skychasemk.enums.PaymentMethod;
+import com.example.skychasemk.enums.PaymentStatus;
+import com.example.skychasemk.model.*;
+import com.example.skychasemk.repository.*;
 import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Optional;
-
-import static com.example.skychasemk.model.Booking.payment_status.COMPLETED;
-
 
 @Service
 public class BookingService {
 
+    private final BookingRepository bookingRepository;
+    private final BookingFlightRepository bookingFlightRepository;
+    private final FlightRepository flightRepository;
+    private final PaymentRepository paymentRepository;
+    private final ApplicationUserRepository userRepository;
+
     @Autowired
-    private BookingRepository bookingRepository;
-
-    public List<Booking> getAllBookings() {
-        return bookingRepository.findAll();
+    public BookingService(BookingRepository bookingRepository,
+                          BookingFlightRepository bookingFlightRepository,
+                          FlightRepository flightRepository,
+                          PaymentRepository paymentRepository, ApplicationUserRepository userRepository) {
+        this.bookingRepository = bookingRepository;
+        this.bookingFlightRepository = bookingFlightRepository;
+        this.flightRepository = flightRepository;
+        this.paymentRepository = paymentRepository;
+        this.userRepository = userRepository;
     }
 
-    public Optional<Booking> getBookingById(Integer bookingID) {
-        return bookingRepository.findById(bookingID);
+    @Transactional
+    public Booking createBooking(BookingDTO dto) {
+        if (dto.getUser() == null || dto.getFlights() == null || dto.getFlights().isEmpty()) {
+            throw new IllegalArgumentException("User and flight IDs must not be null or empty");
+        }
+        ApplicationUser user = userRepository.findById(dto.getUser())
+                .orElseThrow(() -> new RuntimeException("User not found with ID " + dto.getUser()));
+
+        Booking booking = new Booking();
+        booking.setUser(user);
+        booking.setTotalCost(dto.getTotalCost());
+        booking.setBookingDate(LocalDateTime.now());
+        booking.setPaymentStatus(PaymentStatus.Processing);
+
+        Booking savedBooking = bookingRepository.save(booking);
+
+        for (Integer flightId : dto.getFlights()) {
+            Flight flight = flightRepository.findById(flightId)
+                    .orElseThrow(() -> new RuntimeException("Flight not found: " + flightId));
+
+            if (flight.getAvailableSeats() <= 0) {
+                throw new RuntimeException("No seats available for flight: " + flight.getFlightNumber());
+            }
+
+            flight.setAvailableSeats(flight.getAvailableSeats() - 1);
+            flightRepository.save(flight);
+
+            BookingFlight bf = new BookingFlight();
+            bf.setId(new BookingFlightId(savedBooking.getBookingID(), flight.getFlightID()));
+            bf.setBooking(savedBooking);
+            bf.setFlight(flight);
+            bookingFlightRepository.save(bf);
+        }
+
+        Payment payment = new Payment();
+        payment.setBooking(savedBooking);
+        payment.setUser(user);
+        payment.setAmount(dto.getTotalCost());
+        payment.setPaymentStatus(PaymentStatus.Processing);
+        payment.setPaymentMethod(PaymentMethod.Credit);
+        payment.setTransactionDate(LocalDateTime.now());
+
+        paymentRepository.save(payment);
+
+        savedBooking.setPaymentStatus(PaymentStatus.Processing);
+        return bookingRepository.save(savedBooking);
     }
-
-    public Booking saveBooking(Booking booking) {
-        return bookingRepository.save(booking);
-    }
-
-    public Booking updateBooking(Integer bookingID, Booking booking) {
-        if (bookingRepository.existsById(bookingID)) {
-            booking.setStatus(COMPLETED);
-            booking.setUserId(booking.getUserId());
-            booking.setTotal_cost(booking.getTotal_cost());
-            booking.setFlightId(booking.getFlightId());
-            booking.setBooking_date(booking.getBooking_date());
-            return bookingRepository.save(booking);
-        } else {
-            throw new RuntimeException("Booking not found with id " + bookingID);
-        }
-    }
-
-    public void deleteBooking(Integer bookingID) {
-        bookingRepository.deleteById(bookingID);
-    }
-
 }
-
Index: src/main/java/com/example/skychasemk/services/DestinationService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/DestinationService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/DestinationService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,11 +1,13 @@
 package com.example.skychasemk.services;
 
+import com.example.skychasemk.dto.DestinationDTO;
 import com.example.skychasemk.model.Destination;
 import com.example.skychasemk.repository.DestinationRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
-import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
@@ -15,32 +17,58 @@
     private DestinationRepository destinationRepository;
 
-    // Get all destinations
-    public List<Destination> getAllDestinations() {
-        return destinationRepository.findAll();
+    private DestinationDTO toDTO(Destination destination) {
+        return new DestinationDTO(
+                destination.getDestinationId(),
+                destination.getName(),
+                destination.getCountry()
+        );
     }
 
-    // Get destination by ID
-    public Optional<Destination> getDestinationById(Integer destinationID) {
-        return destinationRepository.findById(destinationID);
+    private Destination toEntity(DestinationDTO dto) {
+        Destination destination = new Destination();
+        destination.setDestinationId(dto.getDestinationID());
+        destination.setName(dto.getName());
+        destination.setCountry(dto.getCountry());
+        return destination;
     }
 
-    // Save a new destination
-    public Destination saveDestination(Destination destination) {
-        return destinationRepository.save(destination);
+    public List<DestinationDTO> getAllDestinations() {
+        return destinationRepository.findAll()
+                .stream()
+                .map(this::toDTO)
+                .collect(Collectors.toList());
     }
 
-    // Update an existing destination
-    public Destination updateDestination(Integer destinationID, Destination destination) {
-        if (destinationRepository.existsById(destinationID)) {
-            destination.setDestinationID(destinationID);
-            return destinationRepository.save(destination);
-        } else {
-            throw new RuntimeException("Destination not found with id " + destinationID);
-        }
+    public DestinationDTO getDestinationById(Integer destinationId) {
+        Destination destination = destinationRepository.findById(destinationId)
+                .orElseThrow(() -> new RuntimeException("Destination not found with id " + destinationId));
+        return toDTO(destination);
     }
 
-    // Delete destination
-    public void deleteDestination(Integer destinationID) {
-        destinationRepository.deleteById(destinationID);
+    @Transactional
+    public DestinationDTO createDestination(DestinationDTO dto) {
+        Destination destination = toEntity(dto);
+        Destination saved = destinationRepository.save(destination);
+        return toDTO(saved);
+    }
+
+    @Transactional
+    public DestinationDTO updateDestination(Integer destinationId, DestinationDTO dto) {
+        Destination existing = destinationRepository.findById(destinationId)
+                .orElseThrow(() -> new RuntimeException("Destination not found with id " + destinationId));
+
+        existing.setName(dto.getName());
+        existing.setCountry(dto.getCountry());
+
+        Destination updated = destinationRepository.save(existing);
+        return toDTO(updated);
+    }
+
+    @Transactional
+    public void deleteDestination(Integer destinationId) {
+        if (!destinationRepository.existsById(destinationId)) {
+            throw new RuntimeException("Destination not found with id " + destinationId);
+        }
+        destinationRepository.deleteById(destinationId);
     }
 
Index: src/main/java/com/example/skychasemk/services/FlightService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/FlightService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/FlightService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,7 +1,8 @@
 package com.example.skychasemk.services;
 
-import com.example.skychasemk.model.Destination;
+import com.example.skychasemk.dto.FlightDTO;
+import com.example.skychasemk.model.Airport;
 import com.example.skychasemk.model.Flight;
-import com.example.skychasemk.repository.DestinationRepository;
+import com.example.skychasemk.repository.AirportRepository;
 import com.example.skychasemk.repository.FlightRepository;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,5 +11,5 @@
 import java.time.LocalDate;
 import java.util.List;
-import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
@@ -19,38 +20,32 @@
 
     @Autowired
-    private DestinationRepository destinationRepository;
+    private AirportRepository airportRepository;
 
-    public Optional<Flight> getFlightById(Long flightID) {
-        return flightRepository.findById(flightID);
+    public Flight getFlightById(Integer flightID) {
+        return flightRepository.findById(flightID)
+                .orElseThrow(() -> new RuntimeException("Flight not found with ID " + flightID));
     }
 
-    public Flight saveFlight(Flight flight) {
-        return flightRepository.save(flight);
+    public List<FlightDTO> getAllFlights() {
+        return flightRepository.findAll().stream().map(FlightDTO::new).collect(Collectors.toList());
     }
 
-    public Flight updateFlight(Long flightID, Flight flight) {
-        if (flightRepository.existsById(flightID)) {
-            flight.setFlightID(flightID);
-            return flightRepository.save(flight);
-        } else {
-            throw new RuntimeException("Flight not found with id " + flightID);
+    public List<Flight> searchFlights(String departureName, String arrivalName, LocalDate departureDate, LocalDate returnDate) {
+        Airport departureAirport = airportRepository.findByNameIgnoreCase(departureName)
+                .orElseThrow(() -> new RuntimeException("Departure airport not found: " + departureName));
+        Airport arrivalAirport = airportRepository.findByNameIgnoreCase(arrivalName)
+                .orElseThrow(() -> new RuntimeException("Arrival airport not found: " + arrivalName));
+
+        List<Flight> flights = flightRepository.findByDepartureAirportAndArrivalAirportAndDepartureDate(
+                departureAirport, arrivalAirport, departureDate
+        );
+
+        if (returnDate != null) {
+            flights = flights.stream()
+                    .filter(f -> returnDate.equals(f.getReturnDate()))
+                    .collect(Collectors.toList());
         }
+
+        return flights;
     }
-
-    public void deleteFlight(Long flightID) {
-        flightRepository.deleteById(flightID);
-    }
-
-
-
-    public List<Flight> getFlights(String departureCity, String destination, LocalDate departureDate, LocalDate returnDate) {
-        List<Destination> destinations = destinationRepository.findAll();
-
-        Integer departureID = Destination.getAirportID(departureCity, destinations);
-        Integer destinationID = Destination.getAirportID(destination, destinations);
-
-        return flightRepository.findFlights(departureID, destinationID, departureDate);
-    }
-
 }
-
Index: src/main/java/com/example/skychasemk/services/NotificationService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/NotificationService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/NotificationService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -3,9 +3,9 @@
 import com.example.skychasemk.model.Notification;
 import com.example.skychasemk.repository.NotificationRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.Optional;
 
 @Service
@@ -15,24 +15,36 @@
     private NotificationRepository notificationRepository;
 
-    public List<Notification> getAllNotifications(Integer userId) {
-        return notificationRepository.findByUserId(userId);
+    public List<Notification> getAllNotifications(Long userId) {
+        return notificationRepository.findByUser_UserId(userId);
     }
 
+    public Notification getNotificationById(Integer id) {
+        return notificationRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Notification not found with ID " + id));
+    }
+
+    @Transactional
     public Notification saveNotification(Notification notification) {
         return notificationRepository.save(notification);
     }
 
-    public Notification updateNotification(Integer notificationID, Notification notification) {
-        if (notificationRepository.existsById(notificationID)) {
-            notification.setNotificationID(notificationID);
-            return notificationRepository.save(notification);
-        } else {
-            throw new RuntimeException("Notification not found with id " + notificationID);
-        }
+    @Transactional
+    public Notification updateNotification(Integer id, Notification notificationDetails) {
+        Notification existing = notificationRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Notification not found with ID " + id));
+
+        existing.setMessage(notificationDetails.getMessage());
+        existing.setType(notificationDetails.getType());
+        existing.setDateSent(notificationDetails.getDateSent());
+
+        return notificationRepository.save(existing);
     }
 
-    public void deleteNotification(Integer notificationID) {
-        notificationRepository.deleteById(notificationID);
+    @Transactional
+    public void deleteNotification(Integer id) {
+        if (!notificationRepository.existsById(id)) {
+            throw new RuntimeException("Notification not found with ID " + id);
+        }
+        notificationRepository.deleteById(id);
     }
 }
-
Index: src/main/java/com/example/skychasemk/services/PaymentService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/PaymentService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/PaymentService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,19 +2,19 @@
 
 import com.example.skychasemk.dto.PaymentDTO;
+import com.example.skychasemk.enums.PaymentMethod;
+import com.example.skychasemk.enums.PaymentStatus;
 import com.example.skychasemk.model.ApplicationUser;
+import com.example.skychasemk.model.Booking;
 import com.example.skychasemk.model.Payment;
-import com.example.skychasemk.model.Booking;
 import com.example.skychasemk.repository.ApplicationUserRepository;
 import com.example.skychasemk.repository.BookingRepository;
 import com.example.skychasemk.repository.PaymentRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Optional;
-
-import static com.example.skychasemk.model.Payment.PaymentMethod.CREDIT;
-import static com.example.skychasemk.model.Payment.PaymentStatus.COMPLETED;
 
 @Service
@@ -23,50 +23,65 @@
     @Autowired
     private PaymentRepository paymentRepository;
+
     @Autowired
-    ApplicationUserRepository userRepository;
+    private ApplicationUserRepository userRepository;
+
     @Autowired
-    BookingRepository bookingRepository;
+    private BookingRepository bookingRepository;
 
-    // Get all payments
     public List<Payment> getAllPayments() {
         return paymentRepository.findAll();
     }
 
-    // Get payment by ID
-    public Optional<Payment> getPaymentById(Integer paymentID) {
-        return paymentRepository.findById(paymentID);
+    public Payment getPaymentById(Integer id) {
+        return paymentRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Payment not found with ID " + id));
     }
 
+    @Transactional
+    public Payment createTransaction(PaymentDTO dto) {
+        Booking booking = bookingRepository.findById(Math.toIntExact(dto.getBookingId()))
+                .orElseThrow(() -> new RuntimeException("Booking not found with ID " + dto.getBookingId()));
 
-    // Update an existing payment
-    public Payment updatePayment(Integer paymentID, Payment payment) {
-        if (paymentRepository.existsById(paymentID)) {
-            payment.setPaymentID(paymentID);
-            return paymentRepository.save(payment);
-        } else {
-            throw new RuntimeException("Payment not found with id " + paymentID);
+        Optional<Payment> existingPayment = paymentRepository.findByBooking(booking);
+        if (existingPayment.isPresent()) {
+            throw new RuntimeException("Payment already exists for this booking");
         }
-    }
 
-    // Delete a payment
-    public void deletePayment(Integer paymentID) {
-        paymentRepository.deleteById(paymentID);
-    }
+        ApplicationUser user = userRepository.findById(dto.getUserId())
+                .orElseThrow(() -> new RuntimeException("User not found with ID " + dto.getUserId()));
 
-    public Payment createTransaction(PaymentDTO dto){
-        System.out.println( dto);
         Payment payment = new Payment();
+        payment.setBooking(booking);
+        payment.setUser(user);
         payment.setAmount(dto.getAmount());
-        payment.setBookingId(dto.getBookingId());
-        payment.setUserId(dto.getUserId());
-        payment.setStatus(COMPLETED);
-        payment.setMethod(CREDIT);
-        payment.setTransactionDate(LocalDate.now());
+        payment.setPaymentStatus(PaymentStatus.Success);
+        payment.setPaymentMethod(PaymentMethod.Credit);
+        payment.setTransactionDate(LocalDateTime.now());
+
+        booking.setPaymentStatus(PaymentStatus.Success);
+        bookingRepository.save(booking);
+
         return paymentRepository.save(payment);
     }
 
-    public Payment savePayment(Payment payment) {
-        return paymentRepository.save(payment);
+    @Transactional
+    public Payment updatePayment(Integer id, Payment paymentDetails) {
+        Payment existing = getPaymentById(id);
+
+        existing.setAmount(paymentDetails.getAmount());
+        existing.setPaymentMethod(paymentDetails.getPaymentMethod());
+        existing.setPaymentStatus(paymentDetails.getPaymentStatus());
+        existing.setTransactionDate(paymentDetails.getTransactionDate());
+
+        return paymentRepository.save(existing);
+    }
+
+    @Transactional
+    public void deletePayment(Integer id) {
+        if (!paymentRepository.existsById(id)) {
+            throw new RuntimeException("Payment not found with ID " + id);
+        }
+        paymentRepository.deleteById(id);
     }
 }
-
Index: src/main/java/com/example/skychasemk/services/ReviewService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/ReviewService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/ReviewService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,14 +2,19 @@
 
 import com.example.skychasemk.dto.ReviewDTO;
+import com.example.skychasemk.enums.TargetType;
+import com.example.skychasemk.model.ApplicationUser;
+import com.example.skychasemk.model.Booking;
 import com.example.skychasemk.model.Review;
-import com.example.skychasemk.repository.FlightRepository;
+import com.example.skychasemk.repository.ApplicationUserRepository;
+import com.example.skychasemk.repository.BookingRepository;
 import com.example.skychasemk.repository.ReviewRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDate;
-import java.util.ArrayList;
+import java.time.LocalDateTime;
+import java.util.Comparator;
 import java.util.List;
-import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
@@ -20,59 +25,103 @@
 
     @Autowired
-    private FlightRepository flightRepository;
+    private ApplicationUserRepository userRepository;
 
-    public List<ReviewDTO> getAllReviews(){
-        List<Review> reviews = reviewRepository.findAll();
-        List<ReviewDTO> reviewDTOs = new ArrayList<>();
-
-        for (Review review : reviews) {
-            ReviewDTO dto = new ReviewDTO();
-            dto.setReviewID(review.getReviewID());
-            dto.setReviewComment(review.getReviewComment());
-            dto.setRating(review.getRating());
-            dto.setTargetID(review.getTargetID());
-            dto.setUserID(review.getUserID());
-
-            flightRepository.findById(Long.valueOf(review.getTargetID())).ifPresent(flight -> {
-                dto.setFlightNumber(flight.getFlightNumber());
-            });
+    @Autowired
+    private BookingRepository bookingRepository;
 
 
-            reviewDTOs.add(dto);
-        }
-        return reviewDTOs;
+    public ReviewService(ReviewRepository reviewRepository) {
+        this.reviewRepository = reviewRepository;
     }
 
-   /* public List<Review> getAllReviews() {
-        return reviewRepository.findAll();
-    }*/
-
-    public Optional<Review> getReviewById(Integer reviewID) {
-        return reviewRepository.findById(reviewID);
+    public List<Review> getReviewsByFlightId(Integer flightId) {
+        return reviewRepository.findByFlightId(flightId);
     }
 
+    public List<Review> getReviewsByAirportId(Integer airportId) {
+        return reviewRepository.findByAirportId(airportId);
+    }
+    private ReviewDTO mapToDTO(Review review) {
+        ReviewDTO dto = new ReviewDTO();
+        dto.setReviewId(Long.valueOf(review.getReviewID()));
+        dto.setReviewComment(review.getReviewComment());
+        dto.setRating(review.getRating());
+        dto.setTargetId(review.getTargetID());
+        dto.setUserId(review.getUser().getUserId());
+        return dto;
+    }
+
+    public List<ReviewDTO> getAllReviews() {
+        return reviewRepository.findAll().stream()
+                .map(this::mapToDTO)
+                .collect(Collectors.toList());
+    }
+
+    public Review getReviewById(Integer id) {
+        return reviewRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Review not found with ID " + id));
+    }
+
+    @Transactional
     public Review submitReview(ReviewDTO dto) {
+        ApplicationUser user = userRepository.findById(dto.getUserId())
+                .orElseThrow(() -> new RuntimeException("User not found with ID " + dto.getUserId()));
+
         Review review = new Review();
-        review.setUserID(dto.getUserID());
-        review.setTargetID(dto.getTargetID());
+        review.setUser(user);
+        review.setTargetId(Long.valueOf(dto.getTargetId()));
+        review.setTargetType(TargetType.Flight);
         review.setReviewComment(dto.getReviewComment());
         review.setRating(dto.getRating());
-        review.setDate(LocalDate.now());
+        review.setDate(LocalDateTime.now());
 
         return reviewRepository.save(review);
     }
 
-    public Review updateReview(Integer reviewID, Review review) {
-        if (reviewRepository.existsById(reviewID)) {
-            review.setReviewID(reviewID);
-            return reviewRepository.save(review);
-        } else {
-            throw new RuntimeException("Review not found with id " + reviewID);
-        }
+    @Transactional
+    public Review updateReview(Integer id, Review reviewDetails) {
+        Review existing = getReviewById(id);
+
+        existing.setReviewComment(reviewDetails.getReviewComment());
+        existing.setRating(reviewDetails.getRating());
+        existing.setDate(LocalDateTime.now());
+
+        return reviewRepository.save(existing);
     }
 
-    public void deleteReview(Integer reviewID) {
-        reviewRepository.deleteById(reviewID);
+    @Transactional
+    public void deleteReview(Integer id) {
+        if (!reviewRepository.existsById(id)) {
+            throw new RuntimeException("Review not found with ID " + id);
+        }
+        reviewRepository.deleteById(id);
     }
+
+    @Transactional
+    public Review submitReview(Long userId, Long flightId, String reviewComment, int rating) {
+        // Find all bookings for this user and flight
+        List<Booking> bookings = bookingRepository.findBookingByUserIdAndFlightId(userId, flightId);
+
+        if (bookings.isEmpty()) {
+            throw new RuntimeException("No booking found for this flight and user");
+        }
+
+        Booking booking = bookings.stream()
+                .max(Comparator.comparing(Booking::getBookingDate))
+                .orElseThrow(() -> new RuntimeException("No booking found"));
+
+
+        Review review = new Review();
+        review.setUser(userRepository.findById(userId)
+                .orElseThrow(() -> new RuntimeException("User not found")));
+        review.setBooking(booking); // ← set booking ID to avoid null constraint
+        review.setTargetId(flightId);
+        review.setReviewComment(reviewComment);
+        review.setRating(rating);
+        review.setDate(LocalDateTime.now());
+
+        return reviewRepository.save(review);
+    }
+
+
 }
-
Index: src/main/java/com/example/skychasemk/services/SupportTicketService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/SupportTicketService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/SupportTicketService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,16 +2,15 @@
 
 import com.example.skychasemk.dto.SupportTicketDTO;
+import com.example.skychasemk.enums.TicketStatus;
+import com.example.skychasemk.model.ApplicationUser;
 import com.example.skychasemk.model.SupportTicket;
+import com.example.skychasemk.repository.ApplicationUserRepository;
 import com.example.skychasemk.repository.SupportTicketRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Optional;
-
-import static com.example.skychasemk.model.SupportTicket.TicketStatus.OPEN;
 
 @Service
@@ -21,50 +20,63 @@
     private SupportTicketRepository supportTicketRepository;
 
+    @Autowired
+    private ApplicationUserRepository userRepository;
 
-    public SupportTicketService(SupportTicketRepository repository){
-        this.supportTicketRepository=repository;
-    }
     public List<SupportTicket> getAllTickets() {
-        List<SupportTicket> tickets = supportTicketRepository.findTickets();
-        tickets.forEach(ticket -> System.out.println(ticket.getTicketId() + " - " + ticket.getStatus()));
-        return tickets;
-    }
-    public List<SupportTicket> getResolvedTickets() {
-        List<SupportTicket> tickets = supportTicketRepository.findResolvedTickets();
-        tickets.forEach(ticket -> System.out.println(ticket.getTicketId() + " - " + ticket.getStatus()));
-        return tickets;
+        return supportTicketRepository.findAll();
     }
 
-    public Optional<SupportTicket> getTicketById(Integer ticketID) {
-        return supportTicketRepository.findById(ticketID);
+    public List<SupportTicket> getResolvedTickets() {
+        return supportTicketRepository.findResolvedTickets();
     }
 
-    @PostMapping
-    public SupportTicket createTicket(@RequestBody SupportTicketDTO dto) {
+    public SupportTicket getTicketById(Integer id) {
+        return supportTicketRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Ticket not found with ID " + id));
+    }
+
+    @Transactional
+    public SupportTicket createTicket(SupportTicketDTO dto) {
+        ApplicationUser user = userRepository.findById(dto.getUserId())
+                .orElseThrow(() -> new RuntimeException("User not found with ID " + dto.getUserId()));
+
         SupportTicket ticket = new SupportTicket();
-        ticket.setUserId(dto.getUserId());
-        ticket.setDateCreated(LocalDate.now());
-        ticket.setStatus(OPEN);
+        ticket.setUser(user);
+        ticket.setSubject(dto.getSubject());
         ticket.setDescription(dto.getDescription());
+        ticket.setStatus(TicketStatus.Open);
+        ticket.setDateCreated(LocalDateTime.now());
+
         return supportTicketRepository.save(ticket);
     }
 
-    public SupportTicket save(SupportTicket ticket) {
+    @Transactional
+    public SupportTicket updateTicketStatus(Integer id, TicketStatus newStatus) {
+        SupportTicket ticket = getTicketById(id);
+        ticket.setStatus(newStatus);
+        if (newStatus == TicketStatus.Resolved) {
+            ticket.setDateResolved(LocalDateTime.now());
+        }
         return supportTicketRepository.save(ticket);
     }
 
-    public SupportTicket updateTicket(Integer id, SupportTicket.TicketStatus newStatus) {
-        return supportTicketRepository.findById(id)
+    @Transactional
+    public void deleteTicket(Integer id) {
+        if (!supportTicketRepository.existsById(id)) {
+            throw new RuntimeException("Ticket not found with ID " + id);
+        }
+        supportTicketRepository.deleteById(id);
+    }
+
+    public SupportTicket updateTicket(Integer ticketId, TicketStatus newStatus) {
+        return supportTicketRepository.findById(ticketId)
                 .map(ticket -> {
                     ticket.setStatus(newStatus);
-                    if (newStatus == SupportTicket.TicketStatus.RESOLVED) {
-                        ticket.setDateResolved(LocalDate.now());
+                    if (newStatus == TicketStatus.Resolved) {
+                        ticket.setDateResolved(LocalDateTime.now());
                     }
                     return supportTicketRepository.save(ticket);
                 })
-                .orElseThrow(() -> new RuntimeException("Ticket not found"));
+                .orElseThrow(() -> new RuntimeException("Ticket not found with ID " + ticketId));
     }
-
-
 }
-
Index: c/main/java/com/example/skychasemk/services/TopMonthlyReportService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/TopMonthlyReportService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package com.example.skychasemk.services;
-
-import com.example.skychasemk.model.TopMonthlyReport;
-import com.example.skychasemk.repository.TopMonthlyReportRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDate;
-import java.util.List;
-
-@Service
-public class TopMonthlyReportService {
-    @Autowired
-    private TopMonthlyReportRepository repository;
-
-    public List<TopMonthlyReport> getAllReports() {
-        return repository.findAllRecords();
-    }
-}
Index: src/main/java/com/example/skychasemk/services/WishlistService.java
===================================================================
--- src/main/java/com/example/skychasemk/services/WishlistService.java	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/java/com/example/skychasemk/services/WishlistService.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -2,19 +2,16 @@
 
 import com.example.skychasemk.dto.WishlistDTO;
-import com.example.skychasemk.model.Booking;
+import com.example.skychasemk.model.ApplicationUser;
 import com.example.skychasemk.model.Flight;
 import com.example.skychasemk.model.Wishlist;
+import com.example.skychasemk.repository.ApplicationUserRepository;
 import com.example.skychasemk.repository.FlightRepository;
 import com.example.skychasemk.repository.WishlistRepository;
+import jakarta.transaction.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Optional;
 
 @Service
@@ -27,48 +24,61 @@
     private FlightRepository flightRepository;
 
+    @Autowired
+    private ApplicationUserRepository userRepository;
+
     public List<Wishlist> getAllWishlists() {
         return wishlistRepository.findAll();
     }
 
-
-    public Wishlist saveWishlist(Wishlist wishlist) {
-        if (wishlist == null) {
-            throw new IllegalArgumentException("Wishlist cannot be null");
-        }
-        wishlist.setDate_added(LocalDate.now());
-        return wishlistRepository.save(wishlist);
+    public List<Wishlist> getWishlistForUser(Long userId) {
+        return wishlistRepository.findWishlistByUserId(userId);
     }
 
+    public Wishlist getWishlistItem(Integer wishlistId) {
+        return wishlistRepository.findById(wishlistId)
+                .orElseThrow(() -> new RuntimeException("Wishlist item not found with id " + wishlistId));
+    }
 
-    public void updateWishlist(WishlistDTO wishlistRequest) {
-        Flight flight = flightRepository.findById(Long.valueOf(wishlistRequest.getTargetID()))
-                .orElseThrow(() -> new IllegalArgumentException("Flight not found"));
+    @Transactional
+    public Wishlist addToWishlist(WishlistDTO dto) {
+        ApplicationUser user = userRepository.findById(dto.getUserId())
+                .orElseThrow(() -> new RuntimeException("User not found with id " + dto.getUserId()));
 
-        if (wishlistRequest.isWishlisted()) {
-            Wishlist existingItem = wishlistRepository.findByTargetIdAndUserId(wishlistRequest.getTargetID(), wishlistRequest.getUserID());
-
-            if (existingItem == null) {
-                Wishlist newWishlistItem = new Wishlist();
-                newWishlistItem.setTargetId(Math.toIntExact(wishlistRequest.getTargetID()));
-                newWishlistItem.setUserId(wishlistRequest.getUserID());
-                newWishlistItem.setDate_added(LocalDate.now());
-                wishlistRepository.save(newWishlistItem);
+        // If target is a flight, verify flight exists (if you support destination targets, add similar handling)
+        if (dto.getTargetId() != null && "Flight".equalsIgnoreCase(dto.getTargetType())) {
+            Flight flight = flightRepository.findById(dto.getTargetId())
+                    .orElseThrow(() -> new RuntimeException("Flight not found with id " + dto.getTargetId()));
+            // check for existing
+            Wishlist existing = wishlistRepository.findByTargetIdAndUserId(dto.getTargetId(), dto.getUserId());
+            if (existing != null) {
+                return existing; // already present
             }
+            Wishlist item = new Wishlist();
+            item.setUser(user);
+            item.setTargetID(dto.getTargetId());
+            item.setDateAdded(LocalDateTime.now());
+            return wishlistRepository.save(item);
         } else {
-            Wishlist existingItem = wishlistRepository.findByTargetIdAndUserId(wishlistRequest.getTargetID(), wishlistRequest.getUserID());
-
-            if (existingItem != null) {
-                wishlistRepository.delete(existingItem);
-            }
+            // If you support Destination or other target types, handle here
+            throw new IllegalArgumentException("Unsupported or missing targetType. Expected 'Flight' (case-insensitive).");
         }
     }
 
-    public List<Wishlist> getAllItems(Long userId) {
-        return wishlistRepository.findWishlistByUserId(userId);
+    @Transactional
+    public void removeFromWishlist(Integer userId, Integer targetId) {
+        Wishlist existing = wishlistRepository.findByTargetIdAndUserId(targetId, Long.valueOf(userId));
+        if (existing != null) {
+            wishlistRepository.delete(existing);
+        } else {
+            // no-op or throw depending on desired behavior
+        }
     }
 
-    public void deleteRecordFromWishlist(Integer userId, Integer targetId) {
-        wishlistRepository.deleteByUserIdAndTargetId(userId, targetId);
+    @Transactional
+    public void deleteWishlistItem(Integer wishlistId) {
+        if (!wishlistRepository.existsById(wishlistId)) {
+            throw new RuntimeException("Wishlist item not found with id " + wishlistId);
+        }
+        wishlistRepository.deleteById(wishlistId);
     }
 }
-
Index: src/main/java/com/example/skychasemk/views/MostPopularFlightsView.java
===================================================================
--- src/main/java/com/example/skychasemk/views/MostPopularFlightsView.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/java/com/example/skychasemk/views/MostPopularFlightsView.java	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,16 @@
+package com.example.skychasemk.views;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import org.hibernate.annotations.Immutable;
+
+@Entity
+@Immutable
+@Table(name="most_popular_flights_view")
+public class MostPopularFlightsView {
+    @Id
+    private Integer flightId;
+    private String flightNumber;
+    private Integer bookingsCount;
+}
Index: src/main/resources/static/AdminLogin.html
===================================================================
--- src/main/resources/static/AdminLogin.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/AdminLogin.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -24,5 +24,9 @@
         </div>
 
-        <button type="submit">Login</button>
+        <button type="submit" :disabled="loading">
+            {{ loading ? 'Logging in...' : 'Login' }}
+        </button>
+
+        <p v-if="errorMessage" class="error">{{ errorMessage }}</p>
     </form>
 </div>
@@ -33,9 +37,13 @@
         data: {
             username: '',
-            password: ''
+            password: '',
+            loading: false,
+            errorMessage: ''
         },
         methods: {
             loginAdmin() {
-                // Create login data object
+                this.loading = true;
+                this.errorMessage = '';
+
                 const loginData = {
                     username: this.username,
@@ -43,13 +51,16 @@
                 };
 
-                // Send POST request to the backend for login
                 axios.post('http://localhost:8080/api/admin/login', loginData)
                     .then(response => {
-                        alert('Login successful');
-                        window.location.replace('/support-tickets');
+                        alert('Login successful!');
+                        window.location.href = '/support-tickets'; // redirect to support tickets page
                     })
                     .catch(error => {
-                        const errorMessage = error.response ? error.response.data : 'An error occurred';
-                        alert(errorMessage);
+                        this.errorMessage = error.response && error.response.data
+                            ? error.response.data
+                            : 'An unexpected error occurred';
+                    })
+                    .finally(() => {
+                        this.loading = false;
                     });
             }
@@ -58,4 +69,26 @@
 </script>
 
+<style>
+    /* Optional: quick styling */
+    .login-container {
+        max-width: 400px;
+        margin: 50px auto;
+        padding: 30px;
+        border: 1px solid #ccc;
+        border-radius: 10px;
+    }
+    .form-group {
+        margin-bottom: 15px;
+    }
+    .error {
+        color: red;
+        margin-top: 10px;
+    }
+    button:disabled {
+        opacity: 0.6;
+        cursor: not-allowed;
+    }
+</style>
+
 </body>
 </html>
Index: src/main/resources/static/FlightSearch.html
===================================================================
--- src/main/resources/static/FlightSearch.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/FlightSearch.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -9,7 +9,8 @@
     <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
-    <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0-2/css/all.min.css'>
-    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
+
     <style>
+        /* === Body & Header === */
         body {
             background: url('images/flight.jpg') no-repeat center center fixed;
@@ -35,236 +36,54 @@
             z-index: 10;
         }
-        .header img {
-            width: 40px;
-            height: 40px;
-            margin-right: 20px;
+        .header img { width: 40px; height: 40px; margin-right: 20px; }
+        .header h1 { color: white; margin: 0; font-size: 15px; padding-right: 50px; }
+        .header button { background-color: transparent; border: none; color: white; font-size: 14px; cursor: pointer; }
+        .header button:hover { background-color: transparent; }
+
+        /* === Split === */
+        .split { height: 100%; width: 50%; position: fixed; top: 0; overflow-x: hidden; padding-top: 20px; z-index: 1; }
+        .left { left: 0; padding:50px; }
+        .right { right: 0; padding:10px; }
+
+        /* === Forms === */
+        select {
+            -webkit-appearance: none; -moz-appearance: none; appearance: none;
+            border: 0; outline: 0; font: inherit;
+            width: 20em; height: 3em;
+            padding: 0 4em 0 1em;
+            background: url(https://upload.wikimedia.org/wikipedia/commons/9/9d/Caret_down_font_awesome_whitevariation.svg) no-repeat right 0.8em center/1.4em,
+                        linear-gradient(to left, rgba(255, 255, 255, 0.3) 3em, rgba(255, 255, 255, 0.2) 3em);
+            color: white; border-radius: 0.25em; box-shadow: 0 0 1em 0 rgba(0,0,0,0.2); cursor: pointer;
         }
-
-        .header h1 {
-            color: white;
-            margin: 0;
-            font-size: 15px;
-            padding-right: 50px;
-        }
-
-        .header button {
-            background-color: transparent;
-            border: none;
-            color: white;
-            font-size: 14px;
-        }
-
-        .header button:hover {
-            background-color: transparent;
-            cursor: pointer;
-        }
-
-        .split {
-            height: 100%;
-            width: 50%;
-            position: fixed;
-            z-index: 1;
-            top: 0;
-            overflow-x: hidden;
-            padding-top: 20px;
-        }
-
-        .left {
-            left: 0;
-            padding:50px;
-        }
-
-        .right {
-            right: 0;
-            padding:10px;
-        }
-        select {
-            -webkit-appearance: none;
-            -moz-appearance: none;
-            appearance: none;
-            border: 0;
-            outline: 0;
-            font: inherit;
-            width: 20em;
-            height: 3em;
-            padding: 0 4em 0 1em;
-            background: url(https://upload.wikimedia.org/wikipedia/commons/9/9d/Caret_down_font_awesome_whitevariation.svg) no-repeat right 0.8em center/1.4em, linear-gradient(to left, rgba(255, 255, 255, 0.3) 3em, rgba(255, 255, 255, 0.2) 3em);
-            color: white;
-            border-radius: 0.25em;
-            box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
-            cursor: pointer;
-        }
-        select option {
-            color: inherit;
-            background-color: #320a28;
-        }
-        select:focus {
-            outline: none;
-        }
-        select::-ms-expand {
-            display: none;
-        }
-
-        .search-form-container h2 {
-            color: white;
-            padding-top: 110px;
-        }
-
-        .search-form {
-            padding: 10px;
-            color:white;
-            font-family: Cambria,sans-serif;
-        }
-        .search {
-            background-color: rebeccapurple;
-            color: white;
-            width: 20em;
-            height: 3em;
-        }
-
-        .book {
-            background-color: darkblue;
-            color: white;
-            width: 20em;
-            height: 3em;
-        }
-
-        .search:hover {
-            background-color: mediumpurple;
-        }
-
-        .flights-list-container {
-            color: white;
-        }
-
-        .flights-list-container h2{
-            padding-top: 110px;
-        }
-        .flights-list .flight-item {
-            margin-bottom: 15px;
-        }
-
-        .flights-list .flight-item span {
-            margin-right: 15px;
-        }
-        .flight-item {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            padding: 15px;
-            background: url(https://upload.wikimedia.org/wikipedia/commons/9/9d/Caret_down_font_awesome_whitevariation.svg) no-repeat right 0.8em center/1.4em, linear-gradient(to left, rgba(255, 255, 255, 0.3) 3em, rgba(255, 255, 255, 0.2) 3em);
-            border-radius: 8px;
-            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
-            transition: transform 0.3s ease, background-color 0.3s ease;
-            width: 70%;
-            height: 15px;
-        }
-
-        .popup-overlay {
-            position: fixed;
-            top: 0;
-            left: 0;
-            width: 100%;
-            height: 100%;
-            background: rgba(0, 0, 0, 0.7);
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            z-index: 1000;
-            overflow:hidden;
-        }
-
-        .popup textarea{
-            width: 100%;
-            padding: 10px;
-            margin-top: 10px;
-            border: 1px solid #ccc;
-            border-radius: 4px;
-            resize: vertical;
-            box-sizing: border-box;
-        }
-
-        .popup {
-            background-color: white;
-            padding: 20px;
-            width: 300px;
-            border-radius: 10px;
-        }
-
-        .popup button {
-            margin-top: 10px;
-            background-color: rebeccapurple;
-            color: white;
-            border: none;
-            padding: 5px;
-            cursor: pointer;
-        }
-
-        .popup button:hover {
-            background-color: mediumpurple;
-        }
-
-        .calendar {
-            background-color: transparent;
-            border-radius: 2px;
-            border-color: white;
-            width: 18.6em;
-            height: 2.5em;
-            color:white;
-        }
-
-        .notification-badge {
-            position: absolute;
-            top: 0;
-            right: 0;
-            background-color: red;
-            color: white;
-            border-radius: 50%;
-            padding: 0.3em;
-            font-size: 0.8em;
-        }
-
-        button i {
-            font-size: 24px;
-            color: #333;
-            position: relative;
-        }
-
-        .notifications-popup {
-            position: absolute;
-            top: 50px;
-            right: 0;
-            background: white;
-            border: 1px solid #ddd;
-            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
-            width: 300px;
-            max-height: 400px;
-            overflow-y: auto;
-            padding: 10px;
-            z-index: 9999;
-        }
-
-        .notifications-popup ul {
-            list-style-type: none;
-            padding: 0;
-        }
-
-        .notifications-popup li {
-            padding: 10px;
-            border-bottom: 1px solid #ddd;
-        }
-
-        .notifications-popup button {
-            background-color: #4CAF50; /* Green */
-            color: white;
-            padding: 10px;
-            border: none;
-            cursor: pointer;
-            margin-top: 10px;
-        }
-
-        .notifications-popup button:hover {
-            background-color: #45a049;
-        }
+        select option { color: inherit; background-color: #320a28; }
+        select:focus { outline: none; }
+        .calendar { background-color: transparent; border-radius: 2px; border-color: white; width: 18.6em; height: 2.5em; color:white; }
+        .calendar::-webkit-calendar-picker-indicator { filter: invert(1); cursor: pointer; }
+
+        .search-form-container h2 { color: white; padding-top: 110px; }
+        .search-form { padding: 10px; color:white; font-family: Cambria,sans-serif; }
+        .search { background-color: rebeccapurple; color: white; width: 20em; height: 3em; }
+        .search:hover { background-color: mediumpurple; }
+        .book { background-color: darkblue; color: white; width: 20em; height: 3em; }
+
+        /* === Flights List === */
+        .flights-list-container { color: white; }
+        .flights-list .flight-item { display: flex; align-items: center; justify-content: space-between; padding: 15px; margin-bottom: 15px; background: rgba(255,255,255,0.1); border-radius: 8px; transition: transform 0.3s ease, background-color 0.3s ease; width: 70%; }
+        .wishlist-heart { cursor: pointer; }
+
+        /* === Popup === */
+        .popup-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; overflow:hidden; }
+        .popup { background-color: white; padding: 20px; width: 300px; border-radius: 10px; }
+        .popup textarea { width: 100%; padding: 10px; margin-top: 10px; border: 1px solid #ccc; border-radius: 4px; resize: vertical; }
+        .popup button { margin-top: 10px; background-color: rebeccapurple; color: white; border: none; padding: 5px; cursor: pointer; }
+        .popup button:hover { background-color: mediumpurple; }
+
+        /* === Notifications === */
+        .notification-badge { position: absolute; top: 0; right: 0; background-color: red; color: white; border-radius: 50%; padding: 0.3em; font-size: 0.8em; }
+        .notifications-popup { position: absolute; top: 50px; right: 0; background: white; border: 1px solid #ddd; box-shadow: 0 2px 10px rgba(0,0,0,0.1); width: 300px; max-height: 400px; overflow-y: auto; padding: 10px; z-index: 9999; }
+        .notifications-popup ul { list-style-type: none; padding: 0; }
+        .notifications-popup li { padding: 10px; border-bottom: 1px solid #ddd; }
+        .notifications-popup button { background-color: #4CAF50; color: white; padding: 10px; border: none; cursor: pointer; margin-top: 10px; }
+        .notifications-popup button:hover { background-color: #45a049; }
     </style>
 </head>
@@ -276,5 +95,5 @@
         <button @click="showReportPopup">Report Issue</button>
         <button @click="goToWishlistPage">🤍</button>
-        <button @click="goToReports">Monthly Report</button>
+        <button @click="goToReports">Reports</button>
         <button @click="goToReviews">Reviews</button>
         <button @click="home">Log Out</button>
@@ -289,8 +108,6 @@
         <div class="search-form-container">
             <h2>Search flights</h2>
-
             <div class="search-form">
-                <label for="departure-city">Departure From</label>
-                <br>
+                <label for="departure-city">Departure From</label><br>
                 <select v-model="departureCity" id="departure-city">
                     <option value="" disabled selected>Select a departure city</option>
@@ -298,6 +115,5 @@
                 </select>
 
-                <label for="destination">Destination</label>
-                <br>
+                <label for="destination">Destination</label><br>
                 <select v-model="destination" id="destination">
                     <option value="" disabled selected>Select a destination</option>
@@ -305,23 +121,22 @@
                 </select>
 
-                <label for="departure-date">Departure Date</label>
-                <br>
-                <input class="calendar" type="date" v-model="departureDate" id="departureDate" />
-                <br>
+                <label for="departureDate">Departure Date</label><br>
+                <input class="calendar" type="date" v-model="departureDate" id="departureDate" /><br>
+
                 <div class="toggle-wrapper">
                     <label for="return-date-toggle">Include Return Date<input type="checkbox" v-model="showReturnDate" id="return-date-toggle" /></label>
                 </div>
-                <br>
                 <div v-if="showReturnDate">
-                    <label for="return-date">Return Date</label>
+                    <label for="returnDate">Return Date</label>
                     <input class="calendar" type="date" v-model="returnDate" id="returnDate" />
-                </div>
-                <br>
+                </div><br>
+
                 <button class="search" @click="searchFlights">Search Flights</button>
             </div>
         </div>
     </div>
+
     <div class="split right">
-        <div class="flights-list-container" v-show="isContainerVisible" v-if="flights.length">
+        <div class="flights-list-container" v-if="isContainerVisible && flights.length">
             <h2>Available Flights</h2>
             <div class="flights-list">
@@ -329,5 +144,4 @@
                     <input type="checkbox" v-model="flight.selected" />
                     <span>{{ flight.departureTime }} | {{ flight.arrivalTime }} | ${{ flight.price }} | {{ flight.availableSeats }}</span>
-
                     <span class="wishlist-heart" @click="toggleWishlist(flight)">
                         {{ flight.wishlisted ? '❤️' : '🤍' }}
@@ -335,11 +149,9 @@
                 </div>
             </div>
-
-            <button v-if="selectedFlights.length" @click="bookFlights"  class="book">
-                Book
-            </button>
+            <button v-if="selectedFlights.length" @click="bookFlights" class="book">Book</button>
         </div>
     </div>
 
+    <!-- Report Issue Popup -->
     <div v-if="showPopup" class="popup-overlay">
         <div class="popup">
@@ -353,8 +165,9 @@
     </div>
 
+    <!-- Notifications Popup -->
     <div v-if="notificationsVisible" class="notifications-popup">
         <ul>
             <li v-for="notification in notifications" :key="notification.message">
-                {{ notification.message }} - {{ "RESOLVED" }}
+                {{ notification.message }} - {{ notification.read ? 'RESOLVED' : 'UNREAD' }}
             </li>
         </ul>
@@ -367,5 +180,5 @@
         el: '#app',
         data: {
-            isContainerVisible:false,
+            isContainerVisible: false,
             departureCity: '',
             destination: '',
@@ -375,11 +188,8 @@
             cities: [],
             places: [],
-            bookings: [],
-            pastBookings: [],
             showReturnDate: false,
             showPopup: false,
             issueDescription: '',
-            userId:'',
-            wishlisted:false,
+            userId: '',
             unreadNotifications: 0,
             notifications: [],
@@ -391,161 +201,133 @@
             }
         },
-
         methods: {
-            toggleNotifications() {
-                this.notificationsVisible = !this.notificationsVisible;
-            },
-            fetchNotifications() {
-                console.log('Fetching notifications for userId:', this.userId);
-                axios.get(`/api/notifications/${this.userId}`)
-                    .then(response => {
-                        this.notifications = response.data;
-                        this.unreadNotifications = this.notifications.filter(n => !n.read).length;
-                        console.log(response.data);
-                    })
-                    .catch(error => {
-                        console.error('Error fetching notifications:', error);
-                    });
-            },
+            home() { window.location.href = '/'; },
+            goToReports() { window.location.href = '/Views.html'; },
+            goToReviews() { window.location.href = `/ReviewPage.html?userId=${encodeURIComponent(this.userId)}`; },
+            goToWishlistPage() { window.location.href = `/Wishlist.html?userId=${encodeURIComponent(this.userId)}`; },
+
+            toggleNotifications() { this.notificationsVisible = !this.notificationsVisible; },
+            async fetchNotifications() {
+                try {
+                    const response = await axios.get(`/api/notifications/${this.userId}`);
+                    this.notifications = response.data;
+                    this.unreadNotifications = this.notifications.filter(n => !n.read).length;
+                } catch (error) { console.error('Error fetching notifications:', error); }
+            },
+
+            async fetchFlights() {
+                try {
+                    const response = await axios.get('/api/destinations');
+                    this.cities = [...new Set(response.data.map(d => d.name))];
+                    this.places = [...new Set(response.data.map(d => d.name))];
+                } catch (error) { console.error("Error fetching destinations:", error); }
+            },
+
             async searchFlights() {
-                this.isContainerVisible = !this.isContainerVisible;
-                if (this.departureCity && this.destination && this.departureDate) {
-                    try {
-                        const response = await axios.get('/api/flights/flight-search', {
-                            params: {
-                                departureCity: this.departureCity,
-                                destination: this.destination,
-                                departureDate: this.departureDate,
-                                returnDate: this.showReturnDate ? this.returnDate : null
-                            }
-                        });
-
-                        if (response.data && response.data.length > 0) {
-                            this.flights = response.data;
-                        } else {
-                            this.flights = [];
-                            alert("No flights found for the given criteria.");
-                        }
-                    } catch (error) {
-                        console.error("Error fetching flights", error);
-                    }
-                } else {
+                this.isContainerVisible = false;
+                if (!this.departureCity || !this.destination || !this.departureDate) {
                     alert("Please select departure city, destination, and date.");
-                    this.flights = [];
-                }
-            },
-            bookFlights() {
-                if (!this.selectedFlights.length) {
-                    alert("Please select at least one flight.");
                     return;
                 }
 
-                const flight = this.selectedFlights[0];
-                console.log(flight);
-                const totalCost = flight.price;
-
-                const bookingData = {
-                    flightId: flight.flightID,
-                    bookingDate: new Date().toISOString().split('T')[0],
-                    status: 'PENDING',
-                    totalCost: totalCost,
-                    userId:this.userId
-                };
-                axios.post('/api/bookings', bookingData)
-                    .then(response => {
-                        const bookingID = response.data.bookingId;
-                        alert("Booked successfully!");
-                        window.location.href = `/transaction?amount=${encodeURIComponent(totalCost)}&bookingId=${encodeURIComponent(bookingID)}&flightId=${encodeURIComponent(flight.flightID)}&userId=${encodeURIComponent(this.userId)}`;
-                    })
-                    .catch(error => {
-                        console.error("Error booking flight", error);
-                        alert("There was an error creating your booking. Please try again.");
-                    });
-            },
-            home() {
-                window.location.href = '/';
-            },
-            goToReports(){
-                window.location.href = '/views'
-            },
+                try {
+                    const params = {
+                        departureName: this.departureCity,
+                        arrivalName: this.destination,
+                        departureDate: this.departureDate,
+                        returnDate: this.showReturnDate ? this.returnDate : null
+                    };
+
+                    const response = await axios.get('/api/flights/search', { params });
+                    if (response.data && response.data.length > 0) {
+                        this.flights = response.data.map(f => ({
+                            ...f,
+                            departureTime: f.departuredate,
+                            arrivalTime: f.returndate,
+                            price: Number(f.price) || 100,
+                            selected: false,
+                            wishlisted: false,
+                            availableSeats: f.availableSeats || f.available_seats
+                        }));
+                        this.isContainerVisible = true;
+                    } else {
+                        this.flights = [];
+                        alert("No flights found for the given criteria.");
+                    }
+                } catch (error) {
+                    console.error("Error fetching flights", error.response || error);
+                    alert("Error fetching flights. Please try again.");
+                }
+            },
+
+            async bookFlights() {
+                if (!this.selectedFlights.length) { alert("Please select at least one flight."); return; }
+                if (!this.userId) { alert("User ID is missing. Please login again."); return; }
+
+                const flightIds = this.selectedFlights.map(f => f.flightID);
+                const totalCost = this.selectedFlights.reduce((sum, f) => sum + (Number(f.price) || 0), 0);
+
+                if (totalCost <= 0) { alert("Invalid flight price(s). Cannot proceed."); return; }
+
+                const bookingData = { userId: parseInt(this.userId), flightIds, totalCost };
+                try {
+                    const res = await axios.post('/api/bookings', bookingData);
+                    const bookingID = res.data.bookingID;
+                    alert("Booked successfully!");
+                    window.location.href = `/TransactionPage.html?amount=${encodeURIComponent(totalCost)}&bookingId=${encodeURIComponent(bookingID)}&userId=${encodeURIComponent(this.userId)}`;
+                } catch (err) {
+                    console.error("Booking failed:", err.response || err);
+                    alert("There was an error creating your booking. Please try again.");
+                }
+            },
+
             async toggleWishlist(flight) {
                 flight.wishlisted = !flight.wishlisted;
                 this.$set(this.flights, this.flights.indexOf(flight), flight);
-                const wishlistData = {
-                    userId: parseInt(this.userId),
-                    targetId: flight.flightID
-                };
-                console.log(wishlistData);
-                if (!flight.wishlisted) {
-                    try {
-                        await axios.delete('/api/wishlists', { params: wishlistData });
-                        console.log("Removed from wishlist");
-                    } catch (error) {
-                        console.error("Error removing from wishlist:", error);
-                    }
-                } else {
-                    try {
-                        await axios.post('/api/wishlists/add', wishlistData);
-                        console.log("Added to wishlist");
-                    } catch (error) {
-                        console.error("Error adding to wishlist:", error);
-                    }
-                }
-            },
-            async goToWishlistPage() {
-                window.location.href = `/wishlists?userId=${encodeURIComponent(this.userId)}`;
-            },
-            showReportPopup() {
-                this.showPopup = true;
-            },
-            closePopup() {
-                this.showPopup = false;
-            },
+
+                const wishlistData = { userId: parseInt(this.userId), targetId: flight.flightID, targetType: "flight" };
+                try {
+                    if (flight.wishlisted) await axios.post('/api/wishlists/add', wishlistData);
+                    else await axios.delete('/api/wishlists', { params: wishlistData });
+                } catch (error) { console.error("Error toggling wishlist:", error); }
+            },
+
+            showReportPopup() { this.showPopup = true; },
+            closePopup() { this.showPopup = false; },
             submitIssue() {
-                if (this.issueDescription.trim()) {
-                    const reviewData = {
-                        userId: this.userId,
-                        subject: "Issue Report",
-                        description: this.issueDescription
-                    };
-
-                    axios.post('/api/support-tickets', reviewData)
-                        .then(response => {
-                            alert("Issue reported successfully!");
-                            this.closePopup();
-                        })
-                        .catch(error => {
-                            console.error("Error submitting issue:", error);
-                            alert("There was an error submitting your issue. Please try again.");
-                        });
-                } else {
-                    alert("Please enter a description for the issue.");
-                }
-            },
-            async fetchFlights() {
-                try {
-                    const response = await axios.get('/api/destinations');
-                    this.cities = response.data.map(departureCity => departureCity.name);
-                    this.places = response.data.map(destination => destination.name);
-                } catch (error) {
-                    console.error("Error fetching Destinations", error);
-                }
-            },
-            goToReviews(){
-                window.location.href = `/reviews?userId=${encodeURIComponent(this.userId)}`;
+                if (!this.issueDescription.trim()) { alert("Please enter a description."); return; }
+                const reviewData = { userId: Number(this.userId), subject: "Issue Report", description: this.issueDescription };
+                axios.post('/api/support-tickets', reviewData)
+                    .then(() => { alert("Issue reported successfully!"); this.closePopup(); })
+                    .catch(error => { console.error("Error submitting issue:", error); alert("There was an error submitting your issue."); });
+            },
+
+            markAllAsRead() {
+                this.notifications.forEach(n => n.read = true);
+                this.unreadNotifications = 0;
             }
         },
+
         mounted() {
+            const params = new URLSearchParams(window.location.search);
+            this.userId = Number(params.get("userId"));
+
             this.fetchFlights();
-            const params = new URLSearchParams(window.location.search);
-            this.userId = params.get("userId");
-            axios.get('api/flights')
+            this.fetchNotifications();
+
+            // Load all flights
+            axios.get('/api/flights')
                 .then(response => {
-                    this.flights = response.data;
+                    this.flights = response.data.map(f => ({
+                        flightID: f.flightID,
+                        departureTime: f.departureDate,
+                        arrivalTime: f.returnDate,
+                        price: f.price ? Number(f.price) : 0,
+                        availableSeats: f.availableSeats || f.available_seats,
+                        selected: false,
+                        wishlisted: false
+                    }));
                 })
-                .catch(error => {
-                    console.error("Error fetching flights", error);
-                });
-            this.fetchNotifications();
+                .catch(error => console.error("Error fetching flights", error));
         }
     });
Index: src/main/resources/static/MyReservations.html
===================================================================
--- src/main/resources/static/MyReservations.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/MyReservations.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -7,4 +7,21 @@
     <link rel="stylesheet" href="/css/main.css">
     <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+    <style>
+        .my-reservations-container { max-width: 900px; margin: 80px auto; font-family: Arial, sans-serif; color: #333; }
+        h1, h2 { text-align: center; }
+        .reservation-list { display: flex; flex-direction: column; gap: 15px; margin: 20px 0; }
+        .reservation-item { padding: 15px; border: 1px solid #ccc; border-radius: 8px; background: #f7f7f7; display: flex; justify-content: space-between; align-items: center; }
+        .review-section button { background-color: rebeccapurple; color: white; border: none; padding: 5px 10px; cursor: pointer; border-radius: 4px; }
+        .review-section button:hover { background-color: mediumpurple; }
+        .review-modal { position: fixed; top:0; left:0; width:100%; height:100%; background: rgba(0,0,0,0.7); display:flex; align-items:center; justify-content:center; z-index:1000; }
+        .modal-content { background:white; padding:20px; border-radius:10px; width:300px; display:flex; flex-direction:column; gap:10px; }
+        .modal-content textarea { width:100%; height:100px; resize: vertical; padding:5px; border-radius:4px; border:1px solid #ccc; }
+        .modal-content button { padding:5px 10px; border:none; border-radius:4px; cursor:pointer; }
+        .modal-content button:first-child { background-color: rebeccapurple; color:white; }
+        .modal-content button:first-child:hover { background-color: mediumpurple; }
+        .modal-content button:last-child { background-color: #ccc; }
+        .modal-content button:last-child:hover { background-color: #aaa; }
+    </style>
 </head>
 <body>
@@ -13,5 +30,4 @@
     <h1>My Reservations</h1>
 
-    <!-- Future Reservations -->
     <h2>Future Reservations</h2>
     <div class="reservation-list">
@@ -25,5 +41,4 @@
     </div>
 
-    <!-- Past Reservations -->
     <h2>Past Reservations</h2>
     <div class="reservation-list">
@@ -34,9 +49,7 @@
                 <p><strong>Reservation Date:</strong> {{ reservation.date }}</p>
             </div>
-            <div v-if="!reservation.reviewed" class="review-section">
-                <button @click="openReviewModal(reservation.id)">Leave a Review</button>
-            </div>
-            <div v-if="reservation.reviewed" class="review-section">
-                <p><strong>Review:</strong> {{ reservation.review }}</p>
+            <div class="review-section">
+                <button v-if="!reservation.reviewed" @click="openReviewModal(reservation.id)">Leave a Review</button>
+                <p v-else><strong>Review:</strong> {{ reservation.review }}</p>
             </div>
         </div>
@@ -58,12 +71,9 @@
         el: '#app',
         data: {
-            reservations: [
-                { id: 1, flight: 'NYC to LA', date: '2025-02-10', reviewed: false },
-                { id: 2, flight: 'LA to NYC', date: '2025-01-15', reviewed: true, review: 'Great flight, on time!' },
-                { id: 3, flight: 'Paris to NYC', date: '2024-12-10', reviewed: false },
-            ],
+            reservations: [],
             showReviewModal: false,
             reviewText: '',
-            selectedReservationId: null
+            selectedReservationId: null,
+            userId: null
         },
         computed: {
@@ -72,8 +82,18 @@
             },
             pastReservations() {
-                return this.reservations.filter(reservation => new Date(reservation.date) < new Date());
+                return this.reservations.filter(reservation => new Date(reservation.date) <= new Date());
             }
         },
         methods: {
+            fetchReservations() {
+                axios.get(`/api/reservations?userId=${this.userId}`)
+                    .then(response => {
+                        this.reservations = response.data;
+                    })
+                    .catch(error => {
+                        console.error("Error fetching reservations:", error);
+                        alert("Failed to fetch reservations.");
+                    });
+            },
             openReviewModal(id) {
                 this.selectedReservationId = id;
@@ -85,11 +105,31 @@
             },
             submitReview() {
-                const reservation = this.pastReservations.find(res => res.id === this.selectedReservationId);
-                if (reservation) {
-                    reservation.review = this.reviewText;
-                    reservation.reviewed = true;
+                if (!this.reviewText.trim()) {
+                    alert("Review cannot be empty.");
+                    return;
                 }
-                this.closeReviewModal();
+                const payload = {
+                    reservationId: this.selectedReservationId,
+                    review: this.reviewText
+                };
+                axios.post('/api/reviews', payload)
+                    .then(() => {
+                        const reservation = this.reservations.find(r => r.id === this.selectedReservationId);
+                        if (reservation) {
+                            reservation.review = this.reviewText;
+                            reservation.reviewed = true;
+                        }
+                        this.closeReviewModal();
+                    })
+                    .catch(error => {
+                        console.error("Error submitting review:", error);
+                        alert("Failed to submit review.");
+                    });
             }
+        },
+        mounted() {
+            const params = new URLSearchParams(window.location.search);
+            this.userId = Number(params.get("userId"));
+            this.fetchReservations();
         }
     });
Index: src/main/resources/static/ReviewPage.html
===================================================================
--- src/main/resources/static/ReviewPage.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/ReviewPage.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -11,98 +11,24 @@
     <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0-2/css/all.min.css'>
     <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet">
-<style>
-    .review-container {
-        max-width: 800px;
-        margin: 0 auto;
-        padding: 20px;
-    }
+    <style>
+        .review-container { max-width: 800px; margin: 0 auto; padding: 20px; }
+        .review-list { display: flex; flex-direction: column; gap: 20px; margin-top: 20px; }
+        .review-item { background-color: #fff; border: 1px solid #ccc; border-radius: 12px; padding: 15px 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); transition: box-shadow 0.3s ease; }
+        .review-item:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.2); }
+        .review-item p { margin: 5px 0; }
+        .review-item span { font-weight: bold; color: #673ab7; }
 
-    .review-list {
-        display: flex;
-        flex-direction: column;
-        gap: 20px;
-        margin-top: 20px;
-    }
-
-    .review-item {
-        background-color: #fff;
-        border: 1px solid #ccc;
-        border-radius: 12px;
-        padding: 15px 20px;
-        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-        transition: box-shadow 0.3s ease;
-    }
-
-    .review-item:hover {
-        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
-    }
-
-    .review-item p {
-        margin: 5px 0;
-    }
-
-    .review-item span {
-        font-weight: bold;
-        color: #673ab7;
-    }
-
-    .popup-overlay {
-        position: fixed;
-        top: 0;
-        left: 0;
-        width: 100%;
-        height: 100%;
-        background: rgba(0, 0, 0, 0.7);
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        z-index: 1000;
-        overflow:hidden;
-    }
-
-    .popup textarea{
-        width: 100%;
-        padding: 10px;
-        margin-top: 10px;
-        border: 1px solid #ccc;
-        border-radius: 4px;
-        resize: vertical;
-        box-sizing: border-box;
-    }
-
-    .popup {
-        background-color: white;
-        padding: 20px;
-        width: 300px;
-        border-radius: 10px;
-    }
-
-    .popup button {
-        margin-top: 10px;
-        background-color: rebeccapurple;
-        color: white;
-        border: none;
-        padding: 5px;
-        cursor: pointer;
-    }
-
-    .popup button:hover {
-        background-color: mediumpurple;
-    }
-
-    .popup select {
-        width: 100%;
-        padding: 8px;
-        margin: 10px 0;
-        border-radius: 4px;
-        border: 1px solid #ccc;
-    }
-
-    .popup select:focus {
-        outline: none;
-        border-color: #007bff;
-    }
-
-</style>
+        .popup-overlay { position: fixed; top:0; left:0; width:100%; height:100%; background: rgba(0,0,0,0.7); display:flex; align-items:center; justify-content:center; z-index:1000; }
+        .popup { background-color: white; padding: 20px; width: 320px; border-radius: 10px; display: flex; flex-direction: column; gap: 10px; }
+        .popup textarea, .popup select { width: 100%; padding: 8px; border-radius: 4px; border:1px solid #ccc; box-sizing: border-box; }
+        .popup button { margin-top: 10px; background-color: rebeccapurple; color: white; border: none; padding: 5px; cursor: pointer; border-radius: 4px; }
+        .popup button:hover { background-color: mediumpurple; }
+        .popup-actions { display: flex; justify-content: space-between; gap: 10px; }
+        .popup-actions button.cancel-btn { background-color: #ccc; color: #333; }
+        .popup-actions button.cancel-btn:hover { background-color: #aaa; }
+        header.app-header { display:flex; justify-content:flex-end; gap:10px; padding:10px 20px; background: #673ab7; color:white; }
+        header.app-header button { background: transparent; color:white; border:none; cursor:pointer; font-size:16px; }
+        header.app-header button:hover { text-decoration: underline; }
+    </style>
 </head>
 <body>
@@ -110,6 +36,6 @@
 <div id="app" class="review-page">
     <header class="app-header">
-        <button class="logout-btn" @click="logout">Log Out</button>
-        <button class="show-popup" @click="leaveReview">Leave a review</button>
+        <button @click="logout">Log Out</button>
+        <button @click="leaveReview">Leave a Review</button>
     </header>
 
@@ -117,9 +43,8 @@
         <div class="review-container">
             <h1>Flight Reviews</h1>
-
             <div class="review-list">
-                <div v-for="review in reviews" :key="review.reviewid" class="review-item">
+                <div v-for="review in reviews" :key="review.reviewId" class="review-item">
                     <p><strong>Flight Number:</strong> {{ review.flightNumber }}</p>
-                    <h3>{{ review.date }}</h3>
+                    <p><strong>Date:</strong> {{ review.date }}</p>
                     <p>{{ review.reviewComment }}</p>
                     <span><i class="fas fa-star" style="color:gold;"></i> {{ review.rating }}</span>
@@ -128,29 +53,24 @@
         </div>
     </div>
+
+    <!-- Review Popup -->
     <div v-if="showPopup" class="popup-overlay">
         <div class="popup">
-            <h3>Leave a review</h3>
-
-            <select v-model="selectedFlightId" id="flightNumbers">
-                <option value="" disabled selected>Select a flight</option>
+            <h3>Leave a Review</h3>
+            <select v-model="selectedFlightId">
+                <option value="" disabled>Select a flight</option>
                 <option v-for="flight in flights" :key="flight.flightId" :value="flight.flightId">
                     {{ flight.flightNumber }}
                 </option>
             </select>
-
-
-
-            <textarea v-model="reviewComment" placeholder="Leave a comment here..." rows="5"></textarea>
-
-            <textarea v-model="rating" placeholder="Rate 1-5" rows="1"></textarea>
-
+            <textarea v-model="reviewComment" placeholder="Write your review here..." rows="4"></textarea>
+            <input type="number" min="1" max="5" v-model.number="rating" placeholder="Rating 1-5"/>
             <div class="popup-actions">
-                <button @click="submitReview" class="submit-btn">Submit</button>
-                <button @click="closePopup" class="cancel-btn">Cancel</button>
+                <button @click="submitReview">Submit</button>
+                <button class="cancel-btn" @click="closePopup">Cancel</button>
             </div>
         </div>
     </div>
 </div>
-
 
 <script>
@@ -160,27 +80,36 @@
             userId: '',
             reviews: [],
+            flights: [],
             showPopup: false,
             reviewComment: '',
-            rating: '',
-            flights: [],
-            selectedFlightId: '',
-            flightNumbers:''
+            rating: null,
+            selectedFlightId: null
         },
         methods: {
-            logout() {
-                window.location.href = '/';
-            },
+            logout() { window.location.href = '/'; },
             async fetchReviews() {
                 try {
-                    const response = await axios.get("api/reviews");
+                    const response = await axios.get('/api/reviews');
                     this.reviews = response.data;
-                    console.log(response.data);
                 } catch (error) {
-                    console.error(error);
+                    console.error('Error fetching reviews:', error);
+                }
+            },
+            async fetchFlights() {
+                try {
+                    const response = await axios.get(`/api/reviews/flights/user/${this.userId}`);
+                    this.flights = response.data.map(f => ({
+                        flightId: f.flightID,
+                        flightNumber: f.flightNumber
+                    }));
+                } catch (error) {
+                    console.error('Error fetching user flights:', error);
                 }
             },
             leaveReview() {
                 this.showPopup = true;
-                this.selectedFlightNumber = '';
+                this.selectedFlightId = null;
+                this.reviewComment = '';
+                this.rating = null;
             },
             closePopup() {
@@ -188,43 +117,33 @@
             },
             submitReview() {
-                if (this.reviewComment.trim() && this.selectedFlightId) {
-                    const reviewData = {
-                        userID: this.userId,
-                        targetID: this.selectedFlightId,
-                        reviewComment: this.reviewComment,
-                        rating: this.rating
-                    };
-                    console.log(reviewData);
+                if (!this.selectedFlightId || !this.reviewComment.trim() || !this.rating) {
+                    alert("Please select a flight, enter a comment, and provide a rating.");
+                    return;
+                }
 
-                    axios.post('/api/reviews', reviewData)
-                        .then(response => {
-                            alert("Review added successfully!");
-                            this.closePopup();
-                        })
-                        .catch(error => {
-                            console.error("Error submitting review:", error);
-                            alert("There was an error submitting your review. Please try again.");
-                        });
-                }
-            },
-            async fetchFlights() {
-                try {
-                    const response = await axios.get('/api/flights');
-                    this.flights = response.data.map(flight => ({
-                        flightId: flight.flightID,
-                        flightNumber: flight.flightNumber
-                    }));
-                    console.log(this.flights);
-                } catch (error) {
-                    console.error('Error fetching flights:', error);
-                }
+                const payload = {
+                    userId: this.userId,
+                    targetId: this.selectedFlightId,
+                    reviewComment: this.reviewComment,
+                    rating: this.rating
+                };
+
+                axios.post('/api/reviews', payload)
+                    .then(() => {
+                        alert('Review added successfully!');
+                        this.closePopup();
+                        this.fetchReviews();
+                    })
+                    .catch(err => {
+                        console.error('Error submitting review:', err);
+                        alert('Error submitting review. Please try again.');
+                    });
             }
         },
         mounted() {
             const params = new URLSearchParams(window.location.search);
-            this.userId = params.get("userId");
+            this.userId = params.get('userId');
             this.fetchReviews();
             this.fetchFlights();
-            this.showPopup = false;
         }
     });
Index: src/main/resources/static/SupportTickets.html
===================================================================
--- src/main/resources/static/SupportTickets.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/SupportTickets.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -7,148 +7,94 @@
     <link rel="stylesheet" href="/css/main.css">
     <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+    <style>
+        body {
+            background: url('images/flight.jpg') no-repeat center center fixed;
+            background-size: cover;
+            font-family: Arial, sans-serif;
+            padding-top: 80px;
+            margin: 0;
+        }
+
+        .header {
+            position: fixed;
+            top: 0;
+            left: 0;
+            display: flex;
+            gap: 10px;
+            align-items: center;
+            background-color: rebeccapurple;
+            padding: 10px 20px;
+            width: 100%;
+            z-index: 10;
+        }
+
+        .header button {
+            background-color: transparent;
+            border: 1px solid white;
+            color: white;
+            padding: 5px 10px;
+            cursor: pointer;
+            border-radius: 4px;
+        }
+
+        .header button:hover {
+            background-color: mediumpurple;
+        }
+
+        .support-ticket-container {
+            max-width: 800px;
+            margin: 0 auto;
+            color: white;
+        }
+
+        .ticket-list {
+            margin-top: 20px;
+        }
+
+        .ticket-item {
+            background-color: rgba(0, 0, 0, 0.5);
+            border-radius: 10px;
+            padding: 15px;
+            margin-bottom: 15px;
+        }
+
+        .ticket-item p {
+            margin: 5px 0;
+        }
+
+        .ticket-actions {
+            margin-top: 10px;
+        }
+
+        .ticket-actions button {
+            background-color: darkgreen;
+            border: none;
+            padding: 5px 10px;
+            color: white;
+            cursor: pointer;
+            border-radius: 4px;
+        }
+
+        .ticket-actions button:hover {
+            background-color: green;
+        }
+    </style>
 </head>
-<style>
-    body {
-        background: url('images/flight.jpg') no-repeat center center fixed;
-        background-size: cover;
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        justify-content: center;
-        height: 100vh;
-        margin: 0;
-        font-family: Arial, sans-serif;
-        padding-top: 30px;
-        margin-top: 10px;
-    }
-
-    .header {
-        position: absolute;
-        top: 0;
-        left: 0;
-        display: flex;
-        align-items: center;
-        background-color: rebeccapurple;
-        padding: 10px;
-        width: 100%;
-        z-index: 10;
-        margin-bottom: 10px;
-    }
-    .header img {
-        width: 40px;
-        height: 40px;
-        margin-right: 20px;
-    }
-
-    .header h1 {
-        color: white;
-        margin: 0;
-        font-size: 15px;
-        padding-right: 50px;
-    }
-
-    .header button {
-        background-color: transparent;
-        border: none;
-        color: white;
-        font-size: 14px;
-    }
-
-    .header button:hover {
-        background-color: transparent;
-        cursor: pointer;
-    }
-
-    select {
-        -webkit-appearance: none;
-        -moz-appearance: none;
-        appearance: none;
-        border: 0;
-        outline: 0;
-        font: inherit;
-        width: 20em;
-        height: 3em;
-        padding: 0 4em 0 1em;
-        background: url(https://upload.wikimedia.org/wikipedia/commons/9/9d/Caret_down_font_awesome_whitevariation.svg) no-repeat right 0.8em center/1.4em, linear-gradient(to left, rgba(255, 255, 255, 0.3) 3em, rgba(255, 255, 255, 0.2) 3em);
-        color: white;
-        border-radius: 0.25em;
-        box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
-        cursor: pointer;
-    }
-    select option {
-        color: inherit;
-        background-color: #320a28;
-    }
-    select:focus {
-        outline: none;
-    }
-    select::-ms-expand {
-        display: none;
-    }
-
-    .search-form-container h2 {
-        color: white;
-        padding-top: 110px;
-    }
-
-
-    .flights-list-container h2{
-        padding-top: 110px;
-    }
-    .flights-list .flight-item {
-        margin-bottom: 15px;
-    }
-
-    .flights-list .flight-item span {
-        margin-right: 15px;
-    }
-
-
-    .popup textarea{
-        width: 100%;
-        padding: 10px;
-        margin-top: 10px;
-        border: 1px solid #ccc;
-        border-radius: 4px;
-        resize: vertical;
-        box-sizing: border-box;
-    }
-
-
-    .popup button {
-        margin-top: 10px;
-        background-color: rebeccapurple;
-        color: white;
-        border: none;
-        padding: 5px;
-        cursor: pointer;
-    }
-
-    .popup button:hover {
-        background-color: mediumpurple;
-    }
-    .ticket-list{
-        margin-top:20px;
-        padding-top:60px;
-    }
-
-
-</style>
 <body>
 
 <div id="app" class="support-ticket-container">
     <header class="header">
-        <button @click="fetchResolved">Fetch Resolved Tickets</button>
-        <button @click="fetchTickets">Fetch Unresolved Tickets</button>
+        <button @click="fetchTickets">Unresolved Tickets</button>
+        <button @click="fetchResolved">Resolved Tickets</button>
     </header>
 
     <h1>Support Tickets</h1>
+
     <div class="ticket-list">
         <div class="ticket-item" v-for="ticket in tickets" :key="ticket.ticketId">
-            <div class="ticket-info">
-                <p><strong>Subject:</strong> {{ ticket.subject }}</p>
-                <p><strong>Description:</strong> {{ ticket.description }}</p>
-                <p><strong>Date Resolved:</strong> {{ ticket.dateResolved }}</p>
-            </div>
+            <p><strong>Subject:</strong> {{ ticket.subject }}</p>
+            <p><strong>Description:</strong> {{ ticket.description }}</p>
+            <p v-if="ticket.status === 'RESOLVED'"><strong>Date Resolved:</strong> {{ ticket.dateResolved }}</p>
             <div class="ticket-actions">
                 <button v-if="ticket.status !== 'RESOLVED'" @click="resolveTicket(ticket.ticketId)">Resolve</button>
@@ -157,7 +103,4 @@
     </div>
 </div>
-
-<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
-<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
 
 <script>
@@ -173,46 +116,26 @@
             fetchTickets() {
                 axios.get('http://localhost:8080/api/support-tickets')
-                    .then(response => {
-                        this.tickets = response.data;
-                        console.log(response.data);
-                    })
-                    .catch(error => {
-                        console.error("Error fetching tickets:", error);
-                    });
+                    .then(response => { this.tickets = response.data; })
+                    .catch(error => { console.error("Error fetching tickets:", error); });
             },
             fetchResolved() {
                 axios.get('http://localhost:8080/api/support-tickets/resolved')
-                    .then(response => {
-                        this.tickets = response.data;
-                        console.log(response.data);
-                        this.showResolvedTickets = true;
-                    })
-                    .catch(error => {
-                        console.error("Error fetching resolved tickets:", error);
-                    });
+                    .then(response => { this.tickets = response.data; })
+                    .catch(error => { console.error("Error fetching resolved tickets:", error); });
             },
             resolveTicket(ticketId) {
-                console.log(ticketId);
-                const status = 'RESOLVED';
-                axios.put(`api/support-tickets/${ticketId}/${status}`, {},
-                {
-                    headers: {
-                        'Content-Type': 'application/json'
-                    }
+                axios.put(`http://localhost:8080/api/support-tickets/${ticketId}/RESOLVED`, {}, {
+                    headers: { 'Content-Type': 'application/json' }
                 })
-                    .then(() => {
-                        alert(`Ticket ${ticketId} resolved.`);
-                        this.fetchTickets();
-                    })
-                    .catch(error => {
-                        console.error("Error resolving ticket:", error.response.data);
-                    });
+                .then(() => {
+                    alert(`Ticket ${ticketId} resolved.`);
+                    this.fetchTickets();
+                })
+                .catch(error => { console.error("Error resolving ticket:", error.response?.data || error); });
             }
-
         }
     });
 </script>
 
-
 </body>
 </html>
Index: src/main/resources/static/TransactionPage.html
===================================================================
--- src/main/resources/static/TransactionPage.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/TransactionPage.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -7,302 +7,136 @@
     <link rel="stylesheet" href="/css/main.css">
     <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
+    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+    <style>
+        body {
+            background: #eee;
+            font-family: 'Poppins', sans-serif;
+            padding: 20px;
+        }
+        .container {
+            max-width: 600px;
+            margin: 50px auto;
+            background: #fff;
+            padding: 30px;
+            border-radius: 8px;
+            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
+        }
+        .input-group {
+            margin-bottom: 20px;
+        }
+        .input-group label {
+            display: block;
+            margin-bottom: 6px;
+            font-weight: 500;
+        }
+        .input-group input {
+            width: 100%;
+            padding: 10px;
+            font-size: 14px;
+            border-radius: 4px;
+            border: 1px solid #ccc;
+        }
+        .button-group {
+            display: flex;
+            justify-content: space-between;
+        }
+        .pay-btn {
+            background-color: #4CAF50;
+            color: white;
+            padding: 10px 20px;
+            border: none;
+            cursor: pointer;
+            border-radius: 5px;
+        }
+        .cancel-btn {
+            background-color: #f44336;
+            color: white;
+            padding: 10px 20px;
+            border: none;
+            cursor: pointer;
+            border-radius: 5px;
+        }
+        .pay-btn:hover { background-color: #45a049; }
+        .cancel-btn:hover { background-color: #d32f2f; }
+    </style>
 </head>
-<style>
-    @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap');
-
-
-    * {
-        margin: 0;
-        padding: 0;
-        box-sizing: border-box;
-        font-family: 'Poppins', sans-serif
-    }
-
-    .container {
-        margin: 10px auto;
-        padding: 150px;
-        padding-top:10px;
-    }
-
-    .container .card {
-        width: 100%;
-        box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
-        background: #fff;
-        border-radius: 0px;
-    }
-
-    body {
-        background: #eee
-    }
-
-
-    .container .card .img-box {
-        width: 80px;
-        height: 50px;
-    }
-
-    .container .card img {
-        width: 100%;
-        object-fit: fill;
-    }
-
-    .container .card .number {
-        font-size: 24px;
-    }
-
-    .container .card-body .btn.btn-primary .fab.fa-cc-paypal {
-        font-size: 32px;
-        color: #3333f7;
-    }
-
-    .fab.fa-cc-amex {
-        color: #1c6acf;
-        font-size: 32px;
-    }
-
-    .fab.fa-cc-mastercard {
-        font-size: 32px;
-        color: red;
-    }
-
-    .fab.fa-cc-discover {
-        font-size: 32px;
-        color: orange;
-    }
-
-    .c-green {
-        color: green;
-    }
-
-    .box {
-        height: 40px;
-        width: 50px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        background-color: #ddd;
-    }
-
-    .btn.btn-primary.payment {
-        background-color: #1c6acf;
-        color: white;
-        border-radius: 0px;
-        height: 50px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin-top: 24px;
-    }
-
-
-    .form__div {
-        height: 50px;
-        position: relative;
-        margin-bottom: 24px;
-    }
-
-    .form-control {
-        width: 100%;
-        height: 45px;
-        font-size: 14px;
-        border: 1px solid #DADCE0;
-        border-radius: 0;
-        outline: none;
-        padding: 2px;
-        background: none;
-        z-index: 1;
-        box-shadow: none;
-    }
-
-    .form__label {
-        position: absolute;
-        left: 16px;
-        top: 10px;
-        background-color: #fff;
-        color: #80868B;
-        font-size: 16px;
-        transition: .3s;
-        text-transform: uppercase;
-    }
-
-    .form-control:focus+.form__label {
-        top: -8px;
-        left: 12px;
-        color: #1A73E8;
-        font-size: 12px;
-        font-weight: 500;
-        z-index: 10;
-    }
-
-    .form-control:not(:placeholder-shown).form-control:not(:focus)+.form__label {
-        top: -8px;
-        left: 12px;
-        font-size: 12px;
-        font-weight: 500;
-        z-index: 10;
-    }
-    .input-group{
-        align-content: center;
-        padding-left: 500px;
-        padding-top:10px;
-    }
-    .button-group{
-        display:flex;
-        gap:10px;
-    }
-    .pay-btn,
-    .cancel-btn {
-        padding: 10px 20px;
-        font-size: 16px;
-        cursor: pointer;
-        border: none;
-        border-radius: 5px;
-    }
-
-    .pay-btn {
-        background-color: #4CAF50; /* Green background for the pay button */
-        color: white;
-    }
-
-    .cancel-btn {
-        background-color: #f44336; /* Red background for the cancel button */
-        color: white;
-    }
-</style>
 <body>
 
 <div id="app" class="container">
-    <div class="row">
-                <div class="col-lg-4 mb-lg-0 mb-3">
-                    <div class="card p-3">
-                        <div class="img-box">
-                            <img src="https://www.freepnglogos.com/uploads/visa-logo-download-png-21.png" alt="">
-                        </div>
-                        <div class="number">
-                            <label class="fw-bold" for="">**** **** **** 1060</label>
-                        </div>
-                        <div class="d-flex align-items-center justify-content-between">
-                            <small><span class="fw-bold">Expiry date:</span><span>10/16</span></small>
-                            <small><span class="fw-bold">Name:</span><span>Kumar</span></small>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-lg-4 mb-lg-0 mb-3">
-                    <div class="card p-3">
-                        <div class="img-box">
-                            <img src="https://www.freepnglogos.com/uploads/mastercard-png/file-mastercard-logo-svg-wikimedia-commons-4.png"
-                                 alt="">
-                        </div>
-                        <div class="number">
-                            <label class="fw-bold">**** **** **** 1060</label>
-                        </div>
-                        <div class="d-flex align-items-center justify-content-between">
-                            <small><span class="fw-bold">Expiry date:</span><span>10/16</span></small>
-                            <small><span class="fw-bold">Name:</span><span>Kumar</span></small>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-lg-4 mb-lg-0 mb-3">
-                    <div class="card p-3">
-                        <div class="img-box">
-                            <img src="https://www.freepnglogos.com/uploads/discover-png-logo/credit-cards-discover-png-logo-4.png"
-                                 alt="">
-                        </div>
-                        <div class="number">
-                            <label class="fw-bold">**** **** **** 1060</label>
-                        </div>
-                        <div class="d-flex align-items-center justify-content-between">
-                            <small><span class="fw-bold">Expiry date:</span><span>10/16</span></small>
-                            <small><span class="fw-bold">Name:</span><span>Kumar</span></small>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-12 mt-4">
-                    <div class="card p-3">
-                        <p class="mb-0 fw-bold h4">Payment Methods</p>
-                    </div>
-                </div>
-            </div>
-            <form class="submit" @submit.prevent="processPayment">
-                <div class="input-group">
-                    <label for="cardholder">Cardholder Name</label>
-                    <input type="text" id="cardholder" v-model="cardholder" placeholder="John Doe" required />
-                </div>
-
-                <div class="input-group">
-                    <label for="cardNumber">Card Number</label>
-                    <input type="text"
-                           id="cardNumber"
-                           v-model="cardNumber"
-                           maxlength="16"
-                           placeholder="1234 5678 9012 3456"
-                           required />
-                </div>
-
-                <div class="input-group">
-                    <label for="expiration">Expiration Date</label>
-                    <input type="month" id="expiration" v-model="expiration" required />
-                </div>
-
-                <div class="button-group">
-                    <button type="submit" class="pay-btn">Pay</button>
-                    <button type="button" class="cancel-btn" @click="cancelPayment">Cancel</button>
-                </div>
-            </form>
+    <h2>Complete Your Payment</h2>
+    <form @submit.prevent="processPayment">
+        <div class="input-group">
+            <label for="cardholder">Cardholder Name</label>
+            <input type="text" id="cardholder" v-model="cardholder" placeholder="John Doe" required />
         </div>
 
-<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+        <div class="input-group">
+            <label for="cardNumber">Card Number</label>
+            <input type="text" id="cardNumber" v-model="cardNumber" maxlength="16" placeholder="1234 5678 9012 3456" required />
+        </div>
+
+        <div class="input-group">
+            <label for="expiration">Expiration Date</label>
+            <input type="month" id="expiration" v-model="expiration" required />
+        </div>
+
+        <div class="button-group">
+            <button type="submit" class="pay-btn">Pay</button>
+            <button type="button" class="cancel-btn" @click="cancelPayment">Cancel</button>
+        </div>
+    </form>
+</div>
+
 <script>
-
     new Vue({
         el: '#app',
         data: {
             bookingId: '',
+            flightId: '',
+            userId: '',
+            amount: '',
             cardholder: '',
             cardNumber: '',
             expiration: '',
-            amount: '',
-            paymentSuccess: false,
-            flightId:'',
-            userId:''
+            paymentSuccess: false
         },
         methods: {
             processPayment() {
-                const paymentDate = new Date().toISOString().split('T')[0];
+                if (!this.validateForm()) {
+                    alert("Please fill in all payment details correctly.");
+                    return;
+                }
+                const transactionDate = new Date().toISOString().split('T')[0];
                 const transaction = {
-                    transaction_date:paymentDate,
-                    payment_status:'SUCCESS',
-                    amount:Number(this.amount) || null,
-                    userId:Number(this.userId) || null,
-                    bookingId:Number(this.bookingId) || null
+                    transaction_date: transactionDate,
+                    payment_status: 'SUCCESS',
+                    amount: Number(this.amount),
+                    userId: Number(this.userId),
+                    bookingId: Number(this.bookingId)
                 };
-                console.log(transaction);
-                axios.post('api/payments', transaction)
-                    .then(response => {
-                        console.log(response.data);
+                axios.post('/api/payments', transaction)
+                    .then(() => {
                         this.paymentSuccess = true;
                         this.updateBooking();
-                        setTimeout(() => window.location.href = '/flights',2000);
-                })
-                    .catch(error => console.error("Payment failed", error));
+                        alert("Payment successful!");
+                        setTimeout(() => window.location.href = '/FlightSearch.html?userId=${encodeURIComponent(this.userId)}', 2000);
+                    })
+                    .catch(err => console.error("Payment failed", err));
             },
             updateBooking() {
                 const booking = {
                     bookingDate: new Date().toISOString().split('T')[0],
-                    flightId:this.flightId,
-                    payment_status:'SUCCESS',
-                    total_cost:Number(this.amount) || null,
-                    userId:Number(this.userId) || null,
-                    bookingId:Number(this.bookingId) || null
+                    flightId: this.flightId,
+                    payment_status: 'SUCCESS',
+                    total_cost: Number(this.amount),
+                    userId: Number(this.userId),
+                    bookingId: Number(this.bookingId)
                 };
-                console.log(booking);
-                axios.put(`api/flights/${this.bookingId}`, booking)
-                    .then(response => {
-                        console.log(response.data);
-                    })
-                    .catch(error => console.error("Booking update failed", error));
+                axios.put(`/api/flights/${this.bookingId}`, booking)
+                    .then(() => console.log("Booking updated"))
+                    .catch(err => console.error("Booking update failed", err));
             },
             cancelPayment() {
-                window.location.href = '/flights';
+                window.location.href = '/FlightSearch.html';
             },
             validateForm() {
@@ -314,10 +148,10 @@
             }
         },
-        mounted(){
+        mounted() {
             const params = new URLSearchParams(window.location.search);
             this.userId = params.get("userId");
             this.bookingId = params.get("bookingId");
             this.flightId = params.get("flightId");
-            this.amount=params.get("amount");
+            this.amount = params.get("amount");
         }
     });
Index: src/main/resources/static/UserLogin.html
===================================================================
--- src/main/resources/static/UserLogin.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/UserLogin.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -9,5 +9,4 @@
 </head>
 <body>
-
 <div id="app" class="login-container">
     <h1>Login</h1>
@@ -17,17 +16,14 @@
             <input type="email" id="email" v-model="email" required placeholder="Enter your email" />
         </div>
-
         <div class="form-group">
             <label for="password">Password</label>
             <input type="password" id="password" v-model="password" required placeholder="Enter your password" />
         </div>
-
         <button type="submit">Login</button>
     </form>
     <p>
-        Don't have an account? <a href="/signup">Sign up here</a>
+        Don't have an account? <a href="/UserSignup.html">Sign up here</a>
     </p>
 </div>
-
 <script>
     new Vue({
@@ -59,5 +55,5 @@
                         if(data.userId){
                             console.log('Success');
-                            window.location.href = `/flights?userId=${encodeURIComponent(data.userId)}`;
+                            window.location.href = `/FlightSearch.html?userId=${encodeURIComponent(data.userId)}`;
                         }else {
                             alert('Invalid login credentials');
@@ -72,5 +68,4 @@
     });
 </script>
-
 </body>
 </html>
Index: src/main/resources/static/Views.html
===================================================================
--- src/main/resources/static/Views.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
+++ src/main/resources/static/Views.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Best Value Flights Report</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            margin: 40px;
+        }
+        table {
+            border-collapse: collapse;
+            width: 80%;
+            margin-top: 20px;
+        }
+        th, td {
+            border: 1px solid #333;
+            padding: 10px;
+            text-align: center;
+        }
+        th {
+            background-color: #f4f4f4;
+        }
+        #reportContainer p {
+            margin-top: 20px;
+            font-weight: bold;
+        }
+        button {
+            padding: 10px 20px;
+            cursor: pointer;
+            font-size: 16px;
+        }
+    </style>
+</head>
+<body>
+
+<h1>Reports</h1>
+<button id="btnBestValueFlights">Show Best Value Flights</button>
+
+<div id="reportContainer"></div>
+
+<script>
+    document.getElementById("btnBestValueFlights").addEventListener("click", function() {
+        fetch('/reports?type=bestValueFlights')
+            .then(response => {
+                if (!response.ok) {
+                    throw new Error("Network response was not OK");
+                }
+                return response.json();
+            })
+            .then(result => {
+                const data = result.data;
+                const container = document.getElementById("reportContainer");
+
+                if (!data || data.length === 0) {
+                    container.innerHTML = "<p>No best value flights found.</p>";
+                    return;
+                }
+
+                let html = "<h2>" + result.reportType + "</h2>";
+                html += "<table>";
+                html += "<thead><tr><th>Flight Number</th><th>Price</th><th>Average Rating</th></tr></thead><tbody>";
+
+                data.forEach(flight => {
+                    html += `<tr>
+                        <td>${flight.flightNumber}</td>
+                        <td>$${flight.price.toFixed(2)}</td>
+                        <td>${flight.avgRating.toFixed(1)}</td>
+                    </tr>`;
+                });
+
+                html += "</tbody></table>";
+                container.innerHTML = html;
+            })
+            .catch(error => {
+                document.getElementById("reportContainer").innerHTML = "<p>Error fetching report: " + error.message + "</p>";
+            });
+    });
+</script>
+
+</body>
+</html>
Index: src/main/resources/static/Wishlist.html
===================================================================
--- src/main/resources/static/Wishlist.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/Wishlist.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -176,5 +176,5 @@
                                     flightId: flightData.flightID,
                                     bookingDate: new Date().toISOString().split('T')[0],
-                                    status: 'PENDING',
+                                    status: 'Pending',
                                     totalCost: flightData.price,
                                     userId:this.userId
Index: src/main/resources/static/css/main.css
===================================================================
--- src/main/resources/static/css/main.css	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/css/main.css	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -1,49 +1,15 @@
-.signup-container {
-    background-image: url('../images/registration.jpg');
-    background-size: cover;
-    background-position: center;
-    height: 100vh;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    width: 100%;
-    flex-direction: column;
-    padding: 20px;
-    box-sizing: border-box;
+/* ---------------------- */
+/* General / Shared Styles */
+/* ---------------------- */
+
+body {
+    margin: 0;
+    font-family: Arial, sans-serif;
+    background-color: #f4f4f4;
 }
 
 h1 {
     text-align: center;
-}
-
-.form-group {
-    margin-bottom: 15px;
-}
-
-label {
-    display: block;
-    margin-bottom: 5px;
-}
-
-input {
-    width: 100%;
-    padding: 8px;
-    margin: 5px 0;
-    border: 1px solid #ddd;
-    border-radius: 4px;
-}
-
-button {
-    width: 100%;
-    padding: 10px;
-    background-color: #007bff;
-    color: white;
-    border: none;
-    border-radius: 4px;
-    cursor: pointer;
-}
-
-button:hover {
-    background-color: #0056b3;
+    margin-bottom: 20px;
 }
 
@@ -51,4 +17,29 @@
     text-align: center;
 }
+
+input {
+    padding: 10px;
+    font-size: 16px;
+    border-radius: 5px;
+    border: 1px solid #ccc;
+    width: 100%;
+    box-sizing: border-box;
+    margin-top: 5px;
+}
+
+button {
+    padding: 12px 20px;
+    border: none;
+    border-radius: 5px;
+    cursor: pointer;
+    font-size: 16px;
+    color: white;
+    width: 100%;
+    transition: background-color 0.3s ease;
+}
+
+/* ---------------------- */
+/* Login Page Styles       */
+/* ---------------------- */
 
 .login-container {
@@ -61,10 +52,9 @@
 }
 
-h1 {
-    margin-bottom: 20px;
+.login-container h1 {
     color: mediumvioletred;
 }
 
-.input-group {
+.login-container .input-group {
     margin-bottom: 15px;
     display: flex;
@@ -72,30 +62,39 @@
 }
 
-label {
-    font-size: 14px;
-    font-weight: bold;
+.login-container button {
+    background-color: mediumvioletred;
 }
 
-input {
-    padding: 10px;
-    font-size: 16px;
-    margin-top: 5px;
-    border-radius: 5px;
-    border: 1px solid #ccc;
-    width: 250px;
+.login-container button:hover {
+    background-color: #e91e63;
 }
 
-button {
-    padding: 12px 20px;
-    background-color: mediumvioletred;
-    color: white;
-    border: none;
-    border-radius: 5px;
-    cursor: pointer;
-    font-size: 16px;
+/* ---------------------- */
+/* Signup Page Styles      */
+/* ---------------------- */
+
+.signup-container {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    height: 100vh;
     width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background-image: url('../images/registration.jpg');
+    background-size: cover;
+    background-position: center;
 }
 
-button:hover {
-    background-color: #e91e63;
+.signup-container .form-group {
+    margin-bottom: 15px;
 }
+
+.signup-container button {
+    background-color: #007bff;
+}
+
+.signup-container button:hover {
+    background-color: #0056b3;
+}
Index: src/main/resources/static/index.html
===================================================================
--- src/main/resources/static/index.html	(revision 7deb3e2f2b25173055e53926791fba21c9d4dbac)
+++ src/main/resources/static/index.html	(revision b165c70ab482769e91fbf89912f930e0573d5d33)
@@ -87,10 +87,10 @@
     <img src="/images/home.png" alt="Home Icon">
     <h1>SkyChase</h1>
-    <button class="adminlogin" onclick="location.href='/admin'">Admin?</button>
+    <button class="adminlogin" onclick="location.href='/AdminLogin.html'">Admin?</button>
 </div>
 
 <div class="buttons">
-    <button class="signup" onclick="location.href='/signup'">Sign Up</button>
-    <button class="login" onclick="location.href='/login'">Login</button>
+    <button class="signup" onclick="location.href='/UserSignup.html'">Sign Up</button>
+    <button class="login" onclick="location.href='/UserLogin.html'">Login</button>
 </div>
 </body>
