Changeset f626fb6


Ignore:
Timestamp:
05/23/26 11:58:13 (4 months ago)
Author:
MBK <marija.karapandzova@…>
Branches:
master
Children:
0e894d2
Parents:
bc882d2
Message:

Implement controllers and add functionalities for storing procedures in medical record

Location:
backend/src/main/java/medora
Files:
13 added
1 edited

Legend:

Unmodified
Added
Removed
  • backend/src/main/java/medora/service/ProcedureService.java

    rbc882d2 rf626fb6  
    11package medora.service;
    22
    3 import jakarta.persistence.EntityManager;
    43import medora.dto.SimpleProcedureDTO;
    54import medora.models.domain.*;
     
    109import org.springframework.transaction.annotation.Transactional;
    1110
     11import jakarta.persistence.EntityManager;
    1212import java.time.LocalDate;
    1313import java.util.List;
     
    2626    private final MedicalRecordRepository medicalRecordRepository;
    2727    private final MedicalRecordProcedureRepository medicalRecordProcedureRepository;
    28 
     28    private final ProcedureResultRepository procedureResultRepository;
     29    private final MedicalRecordProcedureResultRepository medicalRecordProcedureResultRepository;
    2930    private final EntityManager entityManager;
    3031
     
    3637                            MedicalRecordRepository medicalRecordRepository,
    3738                            MedicalRecordProcedureRepository medicalRecordProcedureRepository,
    38 
     39                            ProcedureResultRepository procedureResultRepository,
     40                            MedicalRecordProcedureResultRepository medicalRecordProcedureResultRepository,
    3941                            EntityManager entityManager) {
    4042
     
    4648        this.medicalRecordRepository = medicalRecordRepository;
    4749        this.medicalRecordProcedureRepository = medicalRecordProcedureRepository;
    48 
     50        this.procedureResultRepository = procedureResultRepository;
     51        this.medicalRecordProcedureResultRepository = medicalRecordProcedureResultRepository;
    4952        this.entityManager = entityManager;
    5053    }
    5154
    52     //REQUEST PROCEDURE
     55    // ================= REQUEST PROCEDURE (NEW) =================
    5356    @Transactional
    5457    public PerformedProcedures requestProcedureForPatient(Long patientId,
     
    97100    }
    98101
    99     // UC016
     102    // ================= UC016 =================
    100103    @Transactional
    101104    public PerformedProcedures recordProcedure(Long procedureId,
     
    142145    }
    143146
    144     // UC017
     147    // ================= UC017 =================
    145148    @Transactional
    146149    public PerformedProcedures recordProcedureOutcome(Long performedProcedureId, String notes) {
     
    160163    }
    161164
    162     //  LINK TO MEDICAL RECORD
     165    // ================= LINK TO MEDICAL RECORD =================
    163166    @Transactional
    164167    public MedicalRecordProcedures linkProcedureToMedicalRecord(Long medicalRecordId,
     
    189192    }
    190193
    191 
     194    // ================= READ METHODS =================
    192195    @Transactional(readOnly = true)
    193196    public List<PerformedProcedures> getProcedureRequestsForPatient(Long patientId) {
     
    259262    }
    260263
    261     }
     264    // ================= STORE PROCEDURE RESULT (UC017 Enhanced) =================
     265    @Transactional
     266    public ProcedureResults storeProcedureResult(Long medicalRecordId,
     267                                                 Long procedureId,
     268                                                 String resultDescription,
     269                                                 LocalDate resultDate) {
     270
     271        if (medicalRecordId == null || medicalRecordId <= 0)
     272            throw new IllegalArgumentException("Medical record ID must be valid");
     273
     274        if (procedureId == null || procedureId <= 0)
     275            throw new IllegalArgumentException("Procedure ID must be valid");
     276
     277        if (resultDate == null)
     278            throw new IllegalArgumentException("Result date is required");
     279
     280        MedicalRecord record = medicalRecordRepository.findById(medicalRecordId)
     281                .orElseThrow(() -> new RuntimeException("Medical record not found"));
     282
     283        Procedure procedure = procedureRepository.findById(procedureId)
     284                .orElseThrow(() -> new RuntimeException("Procedure not found"));
     285
     286        ProcedureResults result = new ProcedureResults();
     287        result.setProcedure(procedure);
     288        result.setResultDescription(resultDescription);
     289        result.setResultDate(resultDate);
     290
     291        ProcedureResults savedResult = procedureResultRepository.save(result);
     292
     293        // Link to medical record
     294        MedicalRecordProcedureResults link = new MedicalRecordProcedureResults(record, savedResult);
     295        medicalRecordProcedureResultRepository.save(link);
     296
     297        logger.info("Stored procedure result {} for medical record {}", savedResult.getResultId(), medicalRecordId);
     298        return savedResult;
     299    }
     300
     301    @Transactional(readOnly = true)
     302    public List<ProcedureResults> getProcedureResultsForMedicalRecord(Long medicalRecordId) {
     303
     304        if (medicalRecordId == null || medicalRecordId <= 0)
     305            throw new IllegalArgumentException("Medical record ID must be valid");
     306
     307        if (!medicalRecordRepository.existsById(medicalRecordId))
     308            throw new RuntimeException("Medical record not found");
     309
     310        return procedureResultRepository.findByMedicalRecordId(medicalRecordId);
     311    }
     312}
Note: See TracChangeset for help on using the changeset viewer.