From beff4c5297cfedf71ab3188468a4332c73cd54d2 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Mon, 6 Apr 2026 20:22:26 -0600 Subject: [PATCH] simplify appointment to single pet --- .../repository/AppointmentRepository.java | 4 +- .../backend/service/AppointmentService.java | 45 +++++-------------- 2 files changed, 12 insertions(+), 37 deletions(-) diff --git a/backend/src/main/java/com/petshop/backend/repository/AppointmentRepository.java b/backend/src/main/java/com/petshop/backend/repository/AppointmentRepository.java index f4cdc564..00edebf9 100644 --- a/backend/src/main/java/com/petshop/backend/repository/AppointmentRepository.java +++ b/backend/src/main/java/com/petshop/backend/repository/AppointmentRepository.java @@ -21,7 +21,7 @@ public interface AppointmentRepository extends JpaRepository @Query("SELECT a FROM Appointment a JOIN FETCH a.service WHERE a.store.storeId = :storeId AND a.appointmentDate = :date AND LOWER(a.appointmentStatus) NOT IN ('cancelled', 'missed')") List findByStoreAndDate(@Param("storeId") Long storeId, @Param("date") LocalDate date); - @Query("SELECT DISTINCT a FROM Appointment a LEFT JOIN a.pets p WHERE " + + @Query("SELECT a FROM Appointment a LEFT JOIN a.pet p WHERE " + "LOWER(a.customer.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(a.customer.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(a.service.serviceName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + @@ -30,7 +30,7 @@ public interface AppointmentRepository extends JpaRepository Page findByCustomerId(Long customerId, Pageable pageable); - @Query("SELECT DISTINCT a FROM Appointment a LEFT JOIN a.pets p WHERE a.customer.id = :customerId AND (" + + @Query("SELECT a FROM Appointment a LEFT JOIN a.pet p WHERE a.customer.id = :customerId AND (" + "LOWER(a.customer.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(a.customer.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(a.service.serviceName) LIKE LOWER(CONCAT('%', :q, '%')) OR " + diff --git a/backend/src/main/java/com/petshop/backend/service/AppointmentService.java b/backend/src/main/java/com/petshop/backend/service/AppointmentService.java index d3a8594e..d7a65149 100644 --- a/backend/src/main/java/com/petshop/backend/service/AppointmentService.java +++ b/backend/src/main/java/com/petshop/backend/service/AppointmentService.java @@ -24,9 +24,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; @Service @@ -94,13 +92,7 @@ public class AppointmentService { com.petshop.backend.entity.Service service = serviceRepository.findById(request.getServiceId()) .orElseThrow(() -> new ResourceNotFoundException("Service not found with id: " + request.getServiceId())); - boolean hasPetIds = request.getPetIds() != null && !request.getPetIds().isEmpty(); - - if (!hasPetIds) { - throw new IllegalArgumentException("Please specify at least one pet."); - } - - Set pets = fetchPets(request.getPetIds()); + Pet pet = request.getPetId() != null ? fetchPet(request.getPetId()) : null; User employee = resolveAppointmentEmployee(request.getEmployeeId(), store.getStoreId()); validateStoreAccess(store.getStoreId(), authenticatedUser); @@ -113,7 +105,7 @@ public class AppointmentService { appointment.setAppointmentDate(request.getAppointmentDate()); appointment.setAppointmentTime(request.getAppointmentTime()); appointment.setAppointmentStatus(request.getAppointmentStatus()); - appointment.setPets(pets); + appointment.setPet(pet); appointment.setEmployee(employee); appointment = appointmentRepository.save(appointment); @@ -138,13 +130,7 @@ public class AppointmentService { com.petshop.backend.entity.Service service = serviceRepository.findById(request.getServiceId()) .orElseThrow(() -> new ResourceNotFoundException("Service not found with id: " + request.getServiceId())); - boolean hasPetIds = request.getPetIds() != null && !request.getPetIds().isEmpty(); - - if (!hasPetIds) { - throw new IllegalArgumentException("Please specify at least one pet."); - } - - Set pets = fetchPets(request.getPetIds()); + Pet pet = request.getPetId() != null ? fetchPet(request.getPetId()) : null; User employee = resolveAppointmentEmployee(request.getEmployeeId(), store.getStoreId()); validateStoreAccess(store.getStoreId(), authenticatedUser); @@ -156,7 +142,7 @@ public class AppointmentService { appointment.setAppointmentDate(request.getAppointmentDate()); appointment.setAppointmentTime(request.getAppointmentTime()); appointment.setAppointmentStatus(request.getAppointmentStatus()); - appointment.setPets(pets); + appointment.setPet(pet); appointment.setEmployee(employee); appointment = appointmentRepository.save(appointment); @@ -227,24 +213,13 @@ public class AppointmentService { } } - private Set fetchPets(List petIds) { - Set pets = new HashSet<>(); - for (Long petId : petIds) { - Pet pet = petRepository.findById(petId) - .orElseThrow(() -> new ResourceNotFoundException("Pet not found with id: " + petId)); - pets.add(pet); - } - return pets; + private Pet fetchPet(Long petId) { + return petRepository.findById(petId) + .orElseThrow(() -> new ResourceNotFoundException("Pet not found with id: " + petId)); } private AppointmentResponse mapToResponse(Appointment appointment) { - List petNames = appointment.getPets().stream() - .map(Pet::getPetName) - .collect(Collectors.toList()); - - List petIds = appointment.getPets().stream() - .map(Pet::getPetId) - .collect(Collectors.toList()); + Pet pet = appointment.getPet(); AppointmentResponse response = new AppointmentResponse(); response.setAppointmentId(appointment.getAppointmentId()); @@ -259,8 +234,8 @@ public class AppointmentService { response.setAppointmentStatus(appointment.getAppointmentStatus()); response.setEmployeeId(appointment.getEmployee().getId()); response.setEmployeeName(appointment.getEmployee().getFirstName() + " " + appointment.getEmployee().getLastName()); - response.setPetNames(petNames); - response.setPetIds(petIds); + response.setPetName(pet != null ? pet.getPetName() : null); + response.setPetId(pet != null ? pet.getPetId() : null); response.setCreatedAt(appointment.getCreatedAt()); response.setUpdatedAt(appointment.getUpdatedAt());