package com.healthcare.ohctech.service.impl; import com.healthcare.ohctech.dto.FirstAidBoxDto; import com.healthcare.ohctech.entity.FirstAidBox; import com.healthcare.ohctech.entity.Patient; import com.healthcare.ohctech.repository.FirstAidBoxRepo; import com.healthcare.ohctech.repository.PatientRepo; import com.healthcare.ohctech.service.FirstAidBoxService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class FirstAidBoxServiceImpl implements FirstAidBoxService { private final FirstAidBoxRepo firstAidBoxRepo; private final PatientRepo patientRepo; @Autowired public FirstAidBoxServiceImpl(FirstAidBoxRepo firstAidBoxRepo, PatientRepo patientRepo) { this.firstAidBoxRepo = firstAidBoxRepo; this.patientRepo = patientRepo; } @Override public FirstAidBox getFirstAidBoxById(Long boxId) { return firstAidBoxRepo.findById(boxId) .orElseThrow(() -> new RuntimeException("First Aid Box not found with ID: " + boxId)); } @Override public Page<FirstAidBox> getAllFirstAidBoxes(Pageable pageable) { return firstAidBoxRepo.findAll(pageable); } @Override public void addFirstAidBox(FirstAidBoxDto firstAidBoxDto, Long userId) { validateFirstAiderIds(firstAidBoxDto.firstAiderIds()); FirstAidBox firstAidBox = convertToEntity(new FirstAidBox(), firstAidBoxDto); firstAidBox.setModifiedBy(userId); firstAidBoxRepo.save(firstAidBox); } @Override public void updateFirstAidBox(FirstAidBoxDto firstAidBoxDto, Long userId) { validateFirstAiderIds(firstAidBoxDto.firstAiderIds()); Long boxId = firstAidBoxDto.id(); FirstAidBox existingFirstAidBox = firstAidBoxRepo.findById(boxId) .orElseThrow(() -> new RuntimeException("First Aid Box not found with ID: " + boxId)); FirstAidBox updatedFirstAidBox = convertToEntity(existingFirstAidBox, firstAidBoxDto); updatedFirstAidBox.setModifiedBy(userId); firstAidBoxRepo.save(updatedFirstAidBox); } @Override public void deleteFirstAidBox(Long boxId) { FirstAidBox firstAidBox = firstAidBoxRepo.findById(boxId) .orElseThrow(() -> new RuntimeException("First Aid Box not found with ID: " + boxId)); firstAidBoxRepo.delete(firstAidBox); } private void validateFirstAiderIds(List<Long> firstAiderIds) { if (firstAiderIds != null) { for (Long firstAiderId : firstAiderIds) { if (!patientRepo.existsById(firstAiderId)) { throw new RuntimeException("Patient not found for ID: " + firstAiderId); } } } } private FirstAidBox convertToEntity(FirstAidBox firstAidBox, FirstAidBoxDto firstAidBoxDto) { firstAidBox.setBoxName(firstAidBoxDto.boxName()); firstAidBox.setBoxCode(firstAidBoxDto.boxCode()); firstAidBox.setBoxLoc(firstAidBoxDto.boxLoc()); if (firstAidBoxDto.firstAiderIds() != null) { String firstAiderIds = firstAidBoxDto.firstAiderIds().stream() .map(String::valueOf) .collect(Collectors.joining(",")); firstAidBox.setFirstAiderIds(firstAiderIds); } else { firstAidBox.setFirstAiderIds(""); } return firstAidBox; } }