package com.healthcare.ohctech.service.impl; import com.healthcare.ohctech.dto.CheckupFormDto; import com.healthcare.ohctech.entity.CheckupForm; import com.healthcare.ohctech.entity.Patient; import com.healthcare.ohctech.repository.CheckupFormRepo; import com.healthcare.ohctech.repository.PatientRepo; import com.healthcare.ohctech.service.CheckupFormService; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @Service public class CheckupFormServiceImpl implements CheckupFormService { private final CheckupFormRepo checkupFormRepo; private final PatientRepo patientRepo; public CheckupFormServiceImpl(CheckupFormRepo checkupFormRepo, PatientRepo patientRepo) { this.checkupFormRepo = checkupFormRepo; this.patientRepo = patientRepo; } @Override public CheckupForm getCheckupFormById(Long checkupFormId) { return checkupFormRepo.findById(checkupFormId) .orElseThrow(() -> new RuntimeException("CheckupForm not found for ID: " + checkupFormId)); } @Override public CheckupForm getLatestCheckupForm(Long empId) { return checkupFormRepo.findFirstByPatient_IdOrderByCheckupDateDesc(empId); } @Override public Page getAllCheckupForms(Pageable pageable) { return checkupFormRepo.findAll(pageable); } @Override public void addCheckupForm(CheckupFormDto checkupFormDto, Long userId) { CheckupForm checkupForm = convertToEntity(new CheckupForm(), checkupFormDto); checkupForm.setModifiedBy(userId); checkupFormRepo.save(checkupForm); } @Override public void updateCheckupForm(CheckupFormDto checkupFormDto, Long userId) { Long checkupFormId = checkupFormDto.id(); CheckupForm checkupForm = checkupFormRepo.findById(checkupFormId) .orElseThrow(() -> new RuntimeException("CheckupForm not found for ID: " + checkupFormId)); checkupForm.setModifiedBy(userId); convertToEntity(checkupForm, checkupFormDto); checkupFormRepo.save(checkupForm); } @Override public void deleteCheckupForm(Long checkupFormId) { CheckupForm checkupForm = checkupFormRepo.findById(checkupFormId) .orElseThrow(() -> new RuntimeException("CheckupForm not found for ID: " + checkupFormId)); checkupFormRepo.delete(checkupForm); } private CheckupForm convertToEntity(CheckupForm checkupForm, CheckupFormDto checkupFormDto) { checkupForm.setCheckupDate(checkupFormDto.checkupDate()); Patient patient = patientRepo.findById(checkupFormDto.patientId()) .orElseThrow(() -> new RuntimeException("Patient not found for ID: " + checkupFormDto.patientId())); checkupForm.setPatient(patient); checkupForm.setHealthIndex(checkupFormDto.healthIndex()); checkupForm.setBmi(checkupFormDto.bmi()); return checkupForm; } }