PetImageService.java
package org.petify.shelter.service;
import org.petify.shelter.dto.PetImageResponse;
import org.petify.shelter.exception.PetImageNotFoundException;
import org.petify.shelter.exception.PetMaxImagesReachedException;
import org.petify.shelter.exception.PetNotFoundException;
import org.petify.shelter.mapper.PetImageMapper;
import org.petify.shelter.model.Pet;
import org.petify.shelter.model.PetImage;
import org.petify.shelter.repository.PetImageRepository;
import org.petify.shelter.repository.PetRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
@RequiredArgsConstructor
@Service
public class PetImageService {
private final PetImageRepository petImageRepository;
private final PetRepository petRepository;
private final PetImageMapper petImageMapper;
private final StorageService storageService;
@Transactional
public List<PetImageResponse> getImagesByPetId(Long petId) {
return petImageRepository.findAllByPetId(petId).stream()
.map(petImageMapper::toDto)
.toList();
}
@Transactional
public void addPetImages(Long petId, List<MultipartFile> images) throws IOException {
for (MultipartFile input : images) {
addPetImage(petId, input);
}
}
private void addPetImage(Long petId, MultipartFile file) throws IOException {
Pet pet = petRepository.findById(petId)
.orElseThrow(() -> new PetNotFoundException(petId));
int currentImageCount = petImageRepository.countByPetId(petId);
if (currentImageCount >= 5) {
throw new PetMaxImagesReachedException(petId);
}
PetImage petImage = new PetImage();
petImage.setPet(pet);
if (file != null && !file.isEmpty()) {
String imageName = storageService.uploadImage(file);
petImage.setImageName(imageName);
}
petImageRepository.save(petImage);
}
@Transactional
public void deletePetImage(Long imageId) {
PetImage image = petImageRepository.findById(imageId)
.orElseThrow(() -> new PetImageNotFoundException(imageId));
Pet pet = image.getPet();
if (storageService.deleteImage(pet.getImageName())) {
pet.getImages().remove(image);
}
petRepository.save(pet);
}
}