Skip to content
Snippets Groups Projects
Commit f4551b9e authored by Sumaya Mohammud's avatar Sumaya Mohammud
Browse files

added error handling for favorites

parent 87055150
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
This diff is collapsed.
......@@ -151,7 +151,7 @@ public class FolderFavoriteController {
* @param folderId the ID of the folder
* @param dto the data transfer object containing the hotel details
* @param userDetails the authenticated user details
* @return the created favorite
* @return the created favorite or appropriate error response
*/
@Operation(
summary = "Add a hotel to favorites in a folder",
......@@ -159,19 +159,30 @@ public class FolderFavoriteController {
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Hotel added to favorites"),
@ApiResponse(responseCode = "400", description = "Hotel already in folder"),
@ApiResponse(responseCode = "403", description = "Not your folder"),
@ApiResponse(responseCode = "404", description = "Folder not found")
})
@PostMapping("/{folderId}/favorites")
public ResponseEntity<FavoriteDTO> addFavorite(
public ResponseEntity<?> addFavorite(
@PathVariable int folderId,
@RequestBody AddFavoriteDTO dto,
@AuthenticationPrincipal AccessUserDetails userDetails) {
validateFolderOwnership(folderId, userDetails.getUserId());
dto.setFolderId(folderId);
FavoriteDTO favorite = folderFavoriteService.addFavorite(dto);
return ResponseEntity.ok(favorite);
try {
FavoriteDTO favorite = folderFavoriteService.addFavorite(dto);
return ResponseEntity.ok(favorite);
} catch (IllegalArgumentException ex) {
if (ex.getMessage().contains("already in the folder")) {
Map<String, String> response = new HashMap<>();
response.put("message", ex.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);
}
throw ex; // Re-throw other IllegalArgumentExceptions
}
}
/**
......
package edu.ntnu.group8.stayfinder.repository;
import edu.ntnu.group8.stayfinder.entity.Folder;
import edu.ntnu.group8.stayfinder.entity.Hotel;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import edu.ntnu.group8.stayfinder.entity.Favorite;
......@@ -29,4 +30,6 @@ public interface FavoriteRepository extends JpaRepository<Favorite, Integer> {
* @return a list of Favorite entities associated with the given folder
*/
List<Favorite> findByFolder(Folder folder);
boolean existsByFolderAndHotel(Folder folder, Hotel hotel);
}
......@@ -14,6 +14,8 @@ import edu.ntnu.group8.stayfinder.repository.HotelRepository;
import edu.ntnu.group8.stayfinder.dto.AddFavoriteDTO;
import edu.ntnu.group8.stayfinder.repository.UserRepository;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -34,6 +36,7 @@ public class FolderFavoriteService {
private HotelRepository hotelRepository;
@Autowired
private UserRepository userRepository;
private Logger logger = LoggerFactory.getLogger(FolderFavoriteService.class);
/**
......@@ -62,10 +65,23 @@ public class FolderFavoriteService {
*/
public FavoriteDTO addFavorite(AddFavoriteDTO dto) {
Folder folder = folderRepository.findById(dto.getFolderId())
.orElseThrow(() -> new IllegalArgumentException("Folder not found"));
.orElseThrow(() -> {
logger.warn("Folder with ID {} not found", dto.getFolderId());
return new IllegalArgumentException("Folder not found");
});
Hotel hotel = hotelRepository.findById(dto.getHotelId())
.orElseThrow(() -> new IllegalArgumentException("Hotel not found"));
.orElseThrow(() -> {
logger.warn("Hotel with ID {} not found", dto.getHotelId());
return new IllegalArgumentException("Hotel not found");
});
// Check if the hotel already exists in the folder
boolean hotelExists = favoriteRepository.existsByFolderAndHotel(folder, hotel);
if (hotelExists) {
logger.warn("Hotel with ID {} is already in folder with ID {}", dto.getHotelId(), dto.getFolderId());
throw new IllegalArgumentException("This hotel is already in the folder");
}
Favorite favorite = new Favorite();
favorite.setFolder(folder);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment