From 99987067cc2b0f2e94f73fa1487005394cdf306e Mon Sep 17 00:00:00 2001
From: alterdekim <alterwain@protonmail.com>
Date: Thu, 28 Nov 2024 00:20:15 +0300
Subject: [PATCH] synergy fix

---
 .../javabot/controller/DatabaseController.java         | 10 +++++-----
 .../javabot/repository/SynergyRepository.java          |  9 +++++++++
 .../com/alterdekim/javabot/service/SynergyService.java |  3 +++
 .../alterdekim/javabot/service/SynergyServiceImpl.java |  6 ++++++
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java
index 566d0ab..0cb3a0b 100644
--- a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java
+++ b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java
@@ -325,11 +325,11 @@ public class DatabaseController {
         String section = params.get("section");
         long entry_id = Long.parseLong(params.get("entry_id"));
         switch (section) {
-            case "agge" -> bioService.removeById(entry_id);
-            case "hobb" -> hobbyService.removeById(entry_id);
-            case "lugg" -> luggageService.removeById(entry_id);
-            case "heal" -> healthService.removeById(entry_id);
-            case "prof" -> workService.removeById(entry_id);
+            case "agge" -> { bioService.removeById(entry_id); synergyService.removeByEntityId(entry_id, SectionType.AGE); }
+            case "hobb" -> { hobbyService.removeById(entry_id); synergyService.removeByEntityId(entry_id, SectionType.HOBBY); }
+            case "lugg" -> { luggageService.removeById(entry_id); synergyService.removeByEntityId(entry_id, SectionType.LUGGAGE); }
+            case "heal" -> { healthService.removeById(entry_id); synergyService.removeByEntityId(entry_id, SectionType.HEALTH); }
+            case "prof" -> { workService.removeById(entry_id); synergyService.removeByEntityId(entry_id, SectionType.WORK); }
             case "actions" -> actionService.removeById(entry_id);
             case "script_request" -> actionRequestService.removeById(entry_id);
             case "themes" -> themeService.removeById(entry_id);
diff --git a/src/main/java/com/alterdekim/javabot/repository/SynergyRepository.java b/src/main/java/com/alterdekim/javabot/repository/SynergyRepository.java
index 37f8112..2febcce 100644
--- a/src/main/java/com/alterdekim/javabot/repository/SynergyRepository.java
+++ b/src/main/java/com/alterdekim/javabot/repository/SynergyRepository.java
@@ -2,6 +2,10 @@ package com.alterdekim.javabot.repository;
 
 import com.alterdekim.javabot.entities.Synergy;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Optional;
@@ -10,4 +14,9 @@ public interface SynergyRepository extends JpaRepository<Synergy, Long> {
     Optional<Synergy> findById(Long id);
 
     List<Synergy> findAll();
+
+    @Transactional
+    @Modifying
+    @Query("DELETE FROM Synergy s WHERE (s.firstEntityId = :uuid AND s.firstType = :sectionType) OR (s.secondEntityId = :uuid AND s.secondType = :sectionType)")
+    void deleteByEntityId(@Param("uuid") Long entityId, @Param("sectionType") Integer sectionType);
 }
diff --git a/src/main/java/com/alterdekim/javabot/service/SynergyService.java b/src/main/java/com/alterdekim/javabot/service/SynergyService.java
index b356711..fc1a6b8 100644
--- a/src/main/java/com/alterdekim/javabot/service/SynergyService.java
+++ b/src/main/java/com/alterdekim/javabot/service/SynergyService.java
@@ -1,5 +1,6 @@
 package com.alterdekim.javabot.service;
 
+import com.alterdekim.javabot.bot.SectionType;
 import com.alterdekim.javabot.entities.Luggage;
 import com.alterdekim.javabot.entities.Synergy;
 
@@ -11,4 +12,6 @@ public interface SynergyService {
     void saveSynergy(Synergy synergy);
 
     List<Synergy> getAllSynergies();
+
+    void removeByEntityId(Long entityId, SectionType sectionType);
 }
diff --git a/src/main/java/com/alterdekim/javabot/service/SynergyServiceImpl.java b/src/main/java/com/alterdekim/javabot/service/SynergyServiceImpl.java
index da6a9c3..0027933 100644
--- a/src/main/java/com/alterdekim/javabot/service/SynergyServiceImpl.java
+++ b/src/main/java/com/alterdekim/javabot/service/SynergyServiceImpl.java
@@ -1,5 +1,6 @@
 package com.alterdekim.javabot.service;
 
+import com.alterdekim.javabot.bot.SectionType;
 import com.alterdekim.javabot.entities.Synergy;
 import com.alterdekim.javabot.repository.SynergyRepository;
 import org.springframework.stereotype.Service;
@@ -29,4 +30,9 @@ public class SynergyServiceImpl implements SynergyService {
     public List<Synergy> getAllSynergies() {
         return repository.findAll();
     }
+
+    @Override
+    public void removeByEntityId(Long entityId, SectionType sectionType) {
+        repository.deleteByEntityId(entityId, sectionType.ordinal()+1);
+    }
 }