From 1e1368e519087f501c33b305c371c12c231800ec Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Sun, 22 Feb 2026 12:22:41 +0100 Subject: [PATCH] Add transactional support to CharacterService, ScenarioService, and UserService - Annotate create, update, and delete methods in CharacterService and ScenarioService with @Transactional to ensure proper transaction management. - Add @Transactional annotation to the createUser method in UserService for consistency in transaction handling across services. - Enhance data integrity and consistency during operations involving character, scenario, and user management. --- .../java/de/neitzel/roleplay/business/CharacterService.java | 4 ++++ .../java/de/neitzel/roleplay/business/ScenarioService.java | 5 ++++- src/main/java/de/neitzel/roleplay/business/UserService.java | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/neitzel/roleplay/business/CharacterService.java b/src/main/java/de/neitzel/roleplay/business/CharacterService.java index 4d4657b..68a575c 100644 --- a/src/main/java/de/neitzel/roleplay/business/CharacterService.java +++ b/src/main/java/de/neitzel/roleplay/business/CharacterService.java @@ -7,6 +7,7 @@ import de.neitzel.roleplay.fascade.model.CreateCharacterRequest; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import jakarta.transaction.Transactional; import java.util.List; import java.util.Optional; @@ -54,6 +55,7 @@ public class CharacterService { * @param request the create request (name and role required) * @return the created character definition */ + @Transactional public CharacterDefinition create(final CreateCharacterRequest request) { CharacterEntity entity = fromRequest(request, request.getId() != null ? request.getId() : UUID.randomUUID()); characterRepository.persist(entity); @@ -68,6 +70,7 @@ public class CharacterService { * @return the updated character definition * @throws java.util.NoSuchElementException if the character does not exist */ + @Transactional public CharacterDefinition update(final UUID id, final CreateCharacterRequest request) { CharacterEntity entity = characterRepository.findByIdOptional(id); if (entity == null) { @@ -84,6 +87,7 @@ public class CharacterService { * @param id the character UUID * @return true if deleted, false if no character existed */ + @Transactional public boolean delete(final UUID id) { CharacterEntity entity = characterRepository.findByIdOptional(id); if (entity == null) { diff --git a/src/main/java/de/neitzel/roleplay/business/ScenarioService.java b/src/main/java/de/neitzel/roleplay/business/ScenarioService.java index 75b5a9d..5057ca3 100644 --- a/src/main/java/de/neitzel/roleplay/business/ScenarioService.java +++ b/src/main/java/de/neitzel/roleplay/business/ScenarioService.java @@ -13,8 +13,8 @@ import de.neitzel.roleplay.fascade.model.ScenarioSummary; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.persistence.EntityManager; +import jakarta.transaction.Transactional; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -66,6 +66,7 @@ public class ScenarioService { * @return the created scenario summary * @throws IllegalArgumentException if any referenced character id is not found */ + @Transactional public ScenarioSummary create(final CreateScenarioRequest request) { UUID scenarioId = UUID.randomUUID(); ScenarioEntity scenario = new ScenarioEntity(); @@ -104,6 +105,7 @@ public class ScenarioService { * @throws java.util.NoSuchElementException if the scenario does not exist * @throws IllegalArgumentException if any referenced character id is not found */ + @Transactional public ScenarioSummary update(final UUID id, final CreateScenarioRequest request) { ScenarioEntity scenario = scenarioRepository.findByIdWithCharacters(id); if (scenario == null) { @@ -141,6 +143,7 @@ public class ScenarioService { * @param id the scenario UUID * @return true if deleted, false if no scenario existed */ + @Transactional public boolean delete(final UUID id) { ScenarioEntity scenario = scenarioRepository.findByIdWithCharacters(id); if (scenario == null) { diff --git a/src/main/java/de/neitzel/roleplay/business/UserService.java b/src/main/java/de/neitzel/roleplay/business/UserService.java index 8c21778..547ff10 100644 --- a/src/main/java/de/neitzel/roleplay/business/UserService.java +++ b/src/main/java/de/neitzel/roleplay/business/UserService.java @@ -7,6 +7,7 @@ import de.neitzel.roleplay.data.UserRepository; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import jakarta.transaction.Transactional; import java.util.List; import java.util.stream.Collectors; @@ -42,6 +43,7 @@ public class UserService { * @return the created user summary * @throws IllegalArgumentException if username is blank, password is blank, role is invalid, or username already exists */ + @Transactional public UserSummary createUser(final CreateUserRequest request) { String username = request.getUsername(); String password = request.getPassword();