diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java index 8ebc70e..20d598e 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java @@ -1,5 +1,6 @@ package dev.struchkov.godfather.quarkus.core; +import dev.struchkov.godfather.main.domain.StorylineHistory; import dev.struchkov.godfather.main.domain.content.Message; import dev.struchkov.godfather.main.domain.unit.UnitActiveType; import dev.struchkov.godfather.quarkus.context.service.ErrorHandler; @@ -140,7 +141,11 @@ public class GeneralAutoResponder { if (!unit.isNotSaveHistory() && (optDefaultUnit.isEmpty() || !optDefaultUnit.get().equals(unit))) { return Uni.combine().all().unis( Uni.createFrom().item(newUnitRequest), - storyLineService.save(message.getFromPersonId(), unit.getName(), message) + storyLineService.save(StorylineHistory.builder() + .personId(message.getFromPersonId()) + .unitName(unit.getName()) + .message(message) + .build()) ).asTuple(); } return Uni.combine().all().unis(Uni.createFrom().item(newUnitRequest), Uni.createFrom().voidItem()).asTuple(); diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineMailService.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineMailService.java index b8e6c5b..3a03944 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineMailService.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineMailService.java @@ -1,5 +1,6 @@ package dev.struchkov.godfather.quarkus.core.service; +import dev.struchkov.godfather.exception.ConfigAppException; import dev.struchkov.godfather.main.domain.StorylineHistory; import dev.struchkov.godfather.main.domain.UnitPointer; import dev.struchkov.godfather.main.domain.content.Mail; @@ -26,24 +27,32 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; public class StorylineMailService implements StorylineService { private final UnitPointerService unitPointerService; - private final StorylineHistoryRepository storylineHistoryRepository; + private StorylineHistoryRepository storylineRepository; private final Storyline storyLine; private String defaultUnitName; public StorylineMailService( UnitPointerService unitPointerService, - StorylineHistoryRepository storylineHistoryRepository, List unitConfigurations ) { this.storyLine = new StorylineFactory(unitConfigurations).createStoryLine(); this.unitPointerService = unitPointerService; - this.storylineHistoryRepository = storylineHistoryRepository; + } + + public void setStorylineHistoryRepository(StorylineHistoryRepository storylineHistoryRepository) { + this.storylineRepository = storylineHistoryRepository; } @Override public Uni save(@NotNull StorylineHistory storylineHistory) { - isNotNull(storylineHistory); - return storylineHistoryRepository.save(storylineHistory); + isNotNull(storylineHistory, storylineHistory.getUnitName(), storylineHistory.getPersonId(), storylineHistory.getMessage()); + return unitPointerService.save(new UnitPointer(storylineHistory.getPersonId(), storylineHistory.getUnitName())) + .call(ignored -> { + if (checkNotNull(storylineRepository)) { + return storylineRepository.save(storylineHistory); + } + return Uni.createFrom().voidItem(); + }).replaceWithVoid(); } @Override @@ -69,8 +78,15 @@ public class StorylineMailService implements StorylineService { if (checkNotNull(unit) && checkNotEmpty(unit.getNextUnits())) { return Uni.createFrom().item(unit.getNextUnits()); } else { - return storylineHistoryRepository.cleanHistoryByPersonId(personId) - .onItem().transform(v -> storyLine.getStartingUnits()); + return Uni.createFrom().deferred( + () -> { + if (checkNotNull(storylineRepository)) { + return storylineRepository.cleanHistoryByPersonId(personId); + } + return Uni.createFrom().voidItem(); + } + ) + .map(ignored -> storyLine.getStartingUnits()); } } ).map( @@ -85,27 +101,20 @@ public class StorylineMailService implements StorylineService { ); } - @Override - public Uni save(String personId, String unitName, Mail mail) { - isNotNull(personId, unitName, mail); - return unitPointerService.save(new UnitPointer(personId, unitName)) - .onItem().transformToUni(u -> { - final StorylineHistory storylineHistory = new StorylineHistory(); - storylineHistory.setPersonId(personId); - storylineHistory.setUnitName(unitName); - storylineHistory.setMessage(mail); - return storylineHistoryRepository.save(storylineHistory); - }).replaceWithVoid(); - } - @Override public Uni replaceUserToBack(String personId, int countUnitsToBack) { - return storylineHistoryRepository.findByCountLast(personId, countUnitsToBack); + if (checkNotNull(storylineRepository)) { + return storylineRepository.findByCountLast(personId, countUnitsToBack); + } + return Uni.createFrom().failure(new ConfigAppException("Ошибка. Сервис StorylineHistoryRepository не сконфигурирован.")); } @Override public Uni replaceUserToBack(String personId, String unitName) { - return storylineHistoryRepository.findByCountLast(personId, unitName); + if (checkNotNull(storylineRepository)) { + return storylineRepository.findByCountLast(personId, unitName); + } + return Uni.createFrom().failure(new ConfigAppException("Ошибка. Сервис StorylineHistoryRepository не сконфигурирован.")); } @Override @@ -121,7 +130,14 @@ public class StorylineMailService implements StorylineService { @Override public Uni cleanHistoryByPersonId(@NotNull String personId) { - return storylineHistoryRepository.cleanHistoryByPersonId(personId) + return Uni.createFrom().deferred( + () -> { + if (checkNotNull(storylineRepository)) { + return storylineRepository.cleanHistoryByPersonId(personId); + } + return Uni.createFrom().voidItem(); + } + ) .call(() -> unitPointerService.removeByPersonId(personId)); } diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineService.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineService.java index a81b113..23e63f5 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineService.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/service/StorylineService.java @@ -17,8 +17,6 @@ public interface StorylineService { Uni>> getNextUnitByPersonId(@NotNull String personId); - Uni save(String personId, String name, M message); - Uni replaceUserToBack(String personId, int countUnitsToBack); Uni replaceUserToBack(String personId, String unitName); diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java index 22ed340..22d0d35 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java @@ -1,5 +1,6 @@ package dev.struchkov.godfather.simple.core; +import dev.struchkov.godfather.main.domain.StorylineHistory; import dev.struchkov.godfather.main.domain.content.Message; import dev.struchkov.godfather.main.domain.unit.UnitActiveType; import dev.struchkov.godfather.simple.context.service.Accessibility; @@ -150,7 +151,11 @@ public class GeneralAutoResponder { UnitRequest newUnitRequest = actionUnit.action(unitRequest); final Optional> optDefaultUnit = storyLineService.getDefaultUnit(); if (!unit.isNotSaveHistory() && (optDefaultUnit.isEmpty() || !optDefaultUnit.get().equals(unit))) { - storyLineService.save(message.getFromPersonId(), unit.getName(), message); + storyLineService.save(StorylineHistory.builder() + .personId(message.getFromPersonId()) + .unitName(unit.getName()) + .message(message) + .build()); } final MainUnit newUnit = newUnitRequest.getUnit(); return !unit.equals(newUnit) ? getAction(newUnitRequest) : unitRequest; diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineMailService.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineMailService.java index fdcb332..c74f792 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineMailService.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineMailService.java @@ -1,5 +1,6 @@ package dev.struchkov.godfather.simple.core.service; +import dev.struchkov.godfather.exception.ConfigAppException; import dev.struchkov.godfather.main.domain.StorylineHistory; import dev.struchkov.godfather.main.domain.UnitPointer; import dev.struchkov.godfather.main.domain.content.Message; @@ -8,12 +9,14 @@ import dev.struchkov.godfather.simple.context.service.UnitPointerService; import dev.struchkov.godfather.simple.core.Storyline; import dev.struchkov.godfather.simple.core.StorylineFactory; import dev.struchkov.godfather.simple.domain.unit.MainUnit; +import dev.struchkov.haiti.utils.Inspector; import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Optional; import java.util.Set; +import static dev.struchkov.haiti.utils.Checker.checkNotNull; import static dev.struchkov.haiti.utils.Inspector.isNotNull; /** @@ -22,24 +25,29 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; public class StorylineMailService implements StorylineService { private final UnitPointerService unitPointerService; - private final StorylineHistoryRepository storylineHistoryRepository; + private StorylineHistoryRepository storylineRepository; private final Storyline storyLine; private String defaultUnitName; public StorylineMailService( UnitPointerService unitPointerService, - StorylineHistoryRepository storylineHistoryRepository, List unitConfigurations ) { this.storyLine = new StorylineFactory(unitConfigurations).createStoryLine(); this.unitPointerService = unitPointerService; - this.storylineHistoryRepository = storylineHistoryRepository; + } + + public void setStorylineRepository(StorylineHistoryRepository storylineRepository) { + this.storylineRepository = storylineRepository; } @Override public void save(@NotNull StorylineHistory storylineHistory) { - isNotNull(storylineHistory); - storylineHistoryRepository.save(storylineHistory); + isNotNull(storylineHistory, storylineHistory.getUnitName(), storylineHistory.getPersonId(), storylineHistory.getMessage()); + unitPointerService.save(new UnitPointer(storylineHistory.getPersonId(), storylineHistory.getUnitName())); + if (checkNotNull(storylineRepository)) { + storylineRepository.save(storylineHistory); + } } @Override @@ -54,34 +62,24 @@ public class StorylineMailService implements StorylineService final Optional>> optMainUnits = getUnitNameByPersonId(personId) .map(MainUnit::getNextUnits) .filter(mainUnits -> !mainUnits.isEmpty()); - if (optMainUnits.isEmpty()) { - storylineHistoryRepository.cleanHistoryByPersonId(personId); + if (checkNotNull(storylineRepository) && optMainUnits.isEmpty()) { + storylineRepository.cleanHistoryByPersonId(personId); } final Set> nextUnits = optMainUnits.orElse(storyLine.getStartingUnits()); nextUnits.addAll(storyLine.getGlobalUnits()); return nextUnits; } - @Override - public void save(String personId, String unitName, T mail) { - isNotNull(personId, unitName, mail); - unitPointerService.save(new UnitPointer(personId, unitName)); - - final StorylineHistory storylineHistory = new StorylineHistory(); - storylineHistory.setPersonId(personId); - storylineHistory.setUnitName(unitName); - storylineHistory.setMessage(mail); - storylineHistoryRepository.save(storylineHistory); - } - @Override public Optional replaceUserToBack(String personId, int countUnitsToBack) { - return storylineHistoryRepository.findByCountLast(personId, countUnitsToBack); + Inspector.isNotNull(() -> new ConfigAppException("Ошибка. Сервис StorylineHistoryRepository не сконфигурирован."), storylineRepository); + return storylineRepository.findByCountLast(personId, countUnitsToBack); } @Override public Optional replaceUserToBack(String personId, String unitName) { - return storylineHistoryRepository.findByCountLast(personId, unitName); + Inspector.isNotNull(() -> new ConfigAppException("Ошибка. Сервис StorylineHistoryRepository не сконфигурирован."), storylineRepository); + return storylineRepository.findByCountLast(personId, unitName); } @Override @@ -97,7 +95,9 @@ public class StorylineMailService implements StorylineService @Override public void cleanHistoryByPersonId(@NotNull String personId) { - storylineHistoryRepository.cleanHistoryByPersonId(personId); + if (checkNotNull(storylineRepository)) { + storylineRepository.cleanHistoryByPersonId(personId); + } unitPointerService.removeByPersonId(personId); } diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineService.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineService.java index d32d5db..f511450 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineService.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/service/StorylineService.java @@ -16,8 +16,6 @@ public interface StorylineService { Set> getNextUnitByPersonId(@NotNull String personId); - void save(String personId, String name, M message); - Optional replaceUserToBack(String personId, int countUnitsToBack); Optional replaceUserToBack(String personId, String unitName); diff --git a/bot-domain/bot-domain-main/src/main/java/dev/struchkov/godfather/main/domain/StorylineHistory.java b/bot-domain/bot-domain-main/src/main/java/dev/struchkov/godfather/main/domain/StorylineHistory.java index 4851a6c..a11f1c1 100644 --- a/bot-domain/bot-domain-main/src/main/java/dev/struchkov/godfather/main/domain/StorylineHistory.java +++ b/bot-domain/bot-domain-main/src/main/java/dev/struchkov/godfather/main/domain/StorylineHistory.java @@ -2,7 +2,18 @@ package dev.struchkov.godfather.main.domain; import dev.struchkov.godfather.main.domain.content.Message; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class StorylineHistory { private String personId;