From 1fe6ce2ceeb54b4e7f3a108a10cd34c018a11e85 Mon Sep 17 00:00:00 2001
From: Bogdan Kostov <kostobog@fel.cvut.cz>
Date: Fri, 4 Oct 2024 17:59:04 +0200
Subject: [PATCH 1/2] [Fix partially kbss-cvut/record-manager-ui#207] publish
 records - fix update phase of published records

---
 src/main/java/cz/cvut/kbss/study/model/PatientRecord.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/cz/cvut/kbss/study/model/PatientRecord.java b/src/main/java/cz/cvut/kbss/study/model/PatientRecord.java
index 52d37dd5..3184e3d9 100644
--- a/src/main/java/cz/cvut/kbss/study/model/PatientRecord.java
+++ b/src/main/java/cz/cvut/kbss/study/model/PatientRecord.java
@@ -56,7 +56,7 @@ public class PatientRecord implements Serializable, HasOwlKey, HasUri {
     private Question question;
 
     @Enumerated(EnumType.OBJECT_ONE_OF)
-    @OWLObjectProperty(iri = Vocabulary.s_p_has_phase)
+    @OWLObjectProperty(iri = Vocabulary.s_p_has_phase, cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
     private RecordPhase phase;
 
     @Override

From 509db121d219a7abd6949a930612e2cf68a1d5bc Mon Sep 17 00:00:00 2001
From: Bogdan Kostov <kostobog@fel.cvut.cz>
Date: Fri, 4 Oct 2024 19:10:49 +0200
Subject: [PATCH 2/2] [Fix partially kbss-cvut/record-manager-ui#207] publih
 records - properly update published record phase so that cache is cleared

---
 .../kbss/study/persistence/dao/PatientRecordDao.java     | 9 +++++++++
 .../repository/RepositoryPatientRecordService.java       | 5 +----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cz/cvut/kbss/study/persistence/dao/PatientRecordDao.java b/src/main/java/cz/cvut/kbss/study/persistence/dao/PatientRecordDao.java
index a61e42e5..de50e67c 100644
--- a/src/main/java/cz/cvut/kbss/study/persistence/dao/PatientRecordDao.java
+++ b/src/main/java/cz/cvut/kbss/study/persistence/dao/PatientRecordDao.java
@@ -113,6 +113,15 @@ public void update(PatientRecord entity) {
         em.getEntityManagerFactory().getCache().evict(PatientRecordDto.class, entity.getUri(), null);
     }
 
+    public void updateStatus(URI entityUri, RecordPhase targetPhase){
+        PatientRecord entity = find(entityUri);
+        if(entity == null)
+             return;
+        entity.setPhase(targetPhase);
+        em.getEntityManagerFactory().getCache().evict(PatientRecord.class, entity.getUri(), null);
+        em.getEntityManagerFactory().getCache().evict(PatientRecordDto.class, entity.getUri(), null);
+    }
+
     public List<PatientRecordDto> findAllRecords() {
         return em.createNativeQuery("SELECT ?x WHERE { ?x a ?type . }", PatientRecordDto.class)
                  .setParameter("type", typeUri)
diff --git a/src/main/java/cz/cvut/kbss/study/service/repository/RepositoryPatientRecordService.java b/src/main/java/cz/cvut/kbss/study/service/repository/RepositoryPatientRecordService.java
index 0efdba85..896c5c4a 100644
--- a/src/main/java/cz/cvut/kbss/study/service/repository/RepositoryPatientRecordService.java
+++ b/src/main/java/cz/cvut/kbss/study/service/repository/RepositoryPatientRecordService.java
@@ -123,10 +123,7 @@ private void setImportedRecordProvenance(User currentUser, Date now, Optional<Re
     @Override
     public void setPhase(Set<String> recordUris, RecordPhase targetPhase){
         for(String uri : recordUris){
-            PatientRecord record = find(URI.create(uri));
-            if (record == null)
-                continue;
-            record.setPhase(targetPhase);
+            patientRecordDao.updateStatus(URI.create(uri), targetPhase);
         }
     }