From 4f592f42fe6caf8bec09b183a10590390df8c12e Mon Sep 17 00:00:00 2001 From: alterdekim Date: Wed, 27 Nov 2024 19:53:05 +0300 Subject: [PATCH] themes select/deselect ability --- .../javabot/controller/DatabaseController.java | 8 ++++++++ .../javabot/repository/GameThemeRepository.java | 8 ++++++++ .../javabot/service/GameThemeService.java | 2 ++ .../javabot/service/GameThemeServiceImpl.java | 5 +++++ .../resources/static/javascript/panel-script.js | 15 +++++++++++++++ 5 files changed, 38 insertions(+) diff --git a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java index d764843..b896e18 100644 --- a/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java +++ b/src/main/java/com/alterdekim/javabot/controller/DatabaseController.java @@ -288,4 +288,12 @@ public class DatabaseController { } return "error"; } + + @PostMapping("/api/set_theme") + public String set_theme(@RequestParam Map params) { + long theme_id = Long.parseLong(params.get("theme_id")); + boolean state = Boolean.parseBoolean(params.get("selected_state")); + themeService.setThemeState(theme_id, state); + return "ok"; + } } diff --git a/src/main/java/com/alterdekim/javabot/repository/GameThemeRepository.java b/src/main/java/com/alterdekim/javabot/repository/GameThemeRepository.java index d5a1961..bd0302a 100644 --- a/src/main/java/com/alterdekim/javabot/repository/GameThemeRepository.java +++ b/src/main/java/com/alterdekim/javabot/repository/GameThemeRepository.java @@ -2,7 +2,10 @@ package com.alterdekim.javabot.repository; import com.alterdekim.javabot.entities.GameTheme; 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; @@ -14,4 +17,9 @@ public interface GameThemeRepository extends JpaRepository { @Query("SELECT t FROM GameTheme t WHERE t.isSelected = true") List findAllSelected(); + + @Transactional + @Modifying + @Query("UPDATE GameTheme t SET t.isSelected = :state WHERE t.id = :uuid") + void updateThemeState(@Param("uuid") Long themeId, @Param("state") Boolean themeState); } diff --git a/src/main/java/com/alterdekim/javabot/service/GameThemeService.java b/src/main/java/com/alterdekim/javabot/service/GameThemeService.java index 2a7b525..af02ed8 100644 --- a/src/main/java/com/alterdekim/javabot/service/GameThemeService.java +++ b/src/main/java/com/alterdekim/javabot/service/GameThemeService.java @@ -13,4 +13,6 @@ public interface GameThemeService { void saveGameTheme(GameTheme gameTheme); List getSelectedThemes(); + + void setThemeState(Long themeId, Boolean themeState); } diff --git a/src/main/java/com/alterdekim/javabot/service/GameThemeServiceImpl.java b/src/main/java/com/alterdekim/javabot/service/GameThemeServiceImpl.java index d5dcdbb..8f6554f 100644 --- a/src/main/java/com/alterdekim/javabot/service/GameThemeServiceImpl.java +++ b/src/main/java/com/alterdekim/javabot/service/GameThemeServiceImpl.java @@ -37,4 +37,9 @@ public class GameThemeServiceImpl implements GameThemeService { public List getSelectedThemes() { return repository.findAllSelected(); } + + @Override + public void setThemeState(Long themeId, Boolean themeState) { + repository.updateThemeState(themeId, themeState); + } } diff --git a/src/main/resources/static/javascript/panel-script.js b/src/main/resources/static/javascript/panel-script.js index 7688a31..7812b08 100644 --- a/src/main/resources/static/javascript/panel-script.js +++ b/src/main/resources/static/javascript/panel-script.js @@ -294,4 +294,19 @@ $(function() { $(this).addClass("btn-secondary"); } }); + + $(".is-selected-theme").click(function() { + if( $(this).attr("data-selected") == "true" ) { + $(this).attr("data-selected", "false"); + $(this).removeClass("btn-success"); + $(this).html($("#selected_button_texts").attr("data-notselected")); + $(this).addClass("btn-secondary"); + } else { + $(this).attr("data-selected", "true"); + $(this).removeClass("btn-secondary"); + $(this).html($("#selected_button_texts").attr("data-selected")); + $(this).addClass("btn-success"); + } + $.post("/api/set_theme", "theme_id="+($(this).attr("data-id"))+"&selected_state="+($(this).attr("data-selected")), function(data, status) {}); + }); }); \ No newline at end of file