Добавил возможность отправки промежуточного сообщения в AnswerCheck
This commit is contained in:
parent
eaaca3be6c
commit
b2046cc977
@ -53,7 +53,7 @@ public class GeneralAutoResponder<M extends Message> {
|
||||
}
|
||||
|
||||
private void init(Sending sending) {
|
||||
actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>());
|
||||
actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>(sending));
|
||||
actionUnitMap.put(TypeUnit.TEXT, new AnswerTextAction(sending));
|
||||
actionUnitMap.put(TypeUnit.REPLACE_CMD, new ReplaceCmdAction());
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package dev.struchkov.godfather.quarkus.core.action;
|
||||
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
import dev.struchkov.godfather.quarkus.context.service.Sending;
|
||||
import dev.struchkov.godfather.quarkus.core.unit.AnswerCheck;
|
||||
import dev.struchkov.godfather.quarkus.core.unit.MainUnit;
|
||||
import dev.struchkov.godfather.quarkus.core.unit.UnitRequest;
|
||||
@ -8,7 +9,7 @@ import io.smallrye.mutiny.Uni;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
||||
import static dev.struchkov.haiti.utils.Checker.checkTrue;
|
||||
|
||||
/**
|
||||
* Обработчик Unit-а {@link AnswerCheck}.
|
||||
@ -17,15 +18,28 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
||||
*/
|
||||
public class AnswerCheckAction<M extends Message> implements ActionUnit<AnswerCheck<M>, M> {
|
||||
|
||||
private final Sending sending;
|
||||
|
||||
public AnswerCheckAction(Sending sending) {
|
||||
this.sending = sending;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uni<UnitRequest<MainUnit, M>> action(UnitRequest<AnswerCheck<M>, M> unitRequest) {
|
||||
final AnswerCheck<M> unit = unitRequest.getUnit();
|
||||
final M message = unitRequest.getMessage();
|
||||
|
||||
return unit.getCheck().checked(message)
|
||||
.onItem().call(checkValue -> {
|
||||
if (checkTrue(checkValue)) {
|
||||
return sending.send(message.getPersonId(), unit.getIntermediateAnswerIfTrue());
|
||||
} else {
|
||||
return sending.send(message.getPersonId(), unit.getIntermediateAnswerIfFalse());
|
||||
}
|
||||
})
|
||||
.onItem().transform(
|
||||
checkValue -> {
|
||||
if (checkNotNull(checkValue) && checkValue) {
|
||||
if (checkTrue(checkValue)) {
|
||||
return UnitRequest.of(Objects.requireNonNullElse(unit.getUnitTrue(), unit), message);
|
||||
} else {
|
||||
return UnitRequest.of(Objects.requireNonNullElse(unit.getUnitFalse(), unit), message);
|
||||
|
@ -3,6 +3,7 @@ package dev.struchkov.godfather.quarkus.core.unit;
|
||||
import dev.struchkov.autoresponder.entity.KeyWord;
|
||||
import dev.struchkov.godfather.main.core.unit.TypeUnit;
|
||||
import dev.struchkov.godfather.main.core.unit.UnitActiveType;
|
||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
import dev.struchkov.godfather.quarkus.context.service.Accessibility;
|
||||
import dev.struchkov.godfather.quarkus.core.unit.func.CheckData;
|
||||
@ -14,9 +15,6 @@ import java.util.function.Predicate;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static dev.struchkov.godfather.exception.UnitConfigException.unitConfigException;
|
||||
import static dev.struchkov.haiti.utils.Inspector.isAnyNotNull;
|
||||
|
||||
/**
|
||||
* Обработчик запроса, который реализует конструкцию IF в сценарии.
|
||||
*
|
||||
@ -34,6 +32,16 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
*/
|
||||
private final MainUnit unitFalse;
|
||||
|
||||
/**
|
||||
* Временный ответ. Отправляется сразу после проверки условия, если оно true. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка".
|
||||
*/
|
||||
private final BoxAnswer intermediateAnswerIfTrue;
|
||||
|
||||
/**
|
||||
* Промежуточный ответ. Отправляется сразу после проверки условия, если оно false. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка".
|
||||
*/
|
||||
private final BoxAnswer intermediateAnswerIfFalse;
|
||||
|
||||
/**
|
||||
* Условие проверки.
|
||||
*/
|
||||
@ -58,6 +66,8 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
unitTrue = builder.unitTrue;
|
||||
unitFalse = builder.unitFalse;
|
||||
check = builder.check;
|
||||
intermediateAnswerIfTrue = builder.intermediateAnswerIfTrue;
|
||||
intermediateAnswerIfFalse = builder.intermediateAnswerIfFalse;
|
||||
}
|
||||
|
||||
public static <M extends Message> Builder<M> builder() {
|
||||
@ -76,6 +86,14 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
return check;
|
||||
}
|
||||
|
||||
public BoxAnswer getIntermediateAnswerIfTrue() {
|
||||
return intermediateAnswerIfTrue;
|
||||
}
|
||||
|
||||
public BoxAnswer getIntermediateAnswerIfFalse() {
|
||||
return intermediateAnswerIfFalse;
|
||||
}
|
||||
|
||||
public static final class Builder<M extends Message> {
|
||||
private String name = UUID.randomUUID().toString();
|
||||
private String description;
|
||||
@ -95,6 +113,8 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
private MainUnit unitTrue;
|
||||
private MainUnit unitFalse;
|
||||
private CheckData<M> check;
|
||||
private BoxAnswer intermediateAnswerIfFalse;
|
||||
private BoxAnswer intermediateAnswerIfTrue;
|
||||
|
||||
private Builder() {
|
||||
}
|
||||
@ -212,9 +232,25 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswer(BoxAnswer val) {
|
||||
intermediateAnswerIfTrue = val;
|
||||
intermediateAnswerIfFalse = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswerIfTrue(BoxAnswer val) {
|
||||
intermediateAnswerIfTrue = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswerIfFalse(BoxAnswer val) {
|
||||
intermediateAnswerIfFalse = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AnswerCheck<M> build() {
|
||||
// isNotNull(check, unitConfigException("Необходимо установить параметр проверки."));
|
||||
isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки."));
|
||||
// isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки."));
|
||||
return new AnswerCheck<>(this);
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ public class GeneralAutoResponder<M extends Message> {
|
||||
}
|
||||
|
||||
private void init(Sending sending) {
|
||||
actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>());
|
||||
actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>(sending));
|
||||
actionUnitMap.put(TypeUnit.TEXT, new AnswerTextAction(sending));
|
||||
actionUnitMap.put(TypeUnit.REPLACE_CMD, new ReplaceCmdAction());
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package dev.struchkov.godfather.simple.core.action;
|
||||
|
||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
import dev.struchkov.godfather.simple.context.service.Sending;
|
||||
import dev.struchkov.godfather.simple.core.unit.AnswerCheck;
|
||||
import dev.struchkov.godfather.simple.core.unit.MainUnit;
|
||||
import dev.struchkov.godfather.simple.core.unit.UnitRequest;
|
||||
@ -9,6 +11,8 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static dev.struchkov.haiti.utils.Checker.checkNull;
|
||||
|
||||
/**
|
||||
* Обработчик Unit-а {@link AnswerCheck}.
|
||||
*
|
||||
@ -18,19 +22,32 @@ public class AnswerCheckAction<M extends Message> implements ActionUnit<AnswerCh
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(AnswerCheckAction.class);
|
||||
|
||||
private final Sending sending;
|
||||
|
||||
public AnswerCheckAction(Sending sending) {
|
||||
this.sending = sending;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnitRequest<MainUnit, M> action(UnitRequest<AnswerCheck<M>, M> unitRequest) {
|
||||
final AnswerCheck<M> unit = unitRequest.getUnit();
|
||||
log.debug("Началась обработка unit: {}.", unit.getName());
|
||||
|
||||
final M message = unitRequest.getMessage();
|
||||
|
||||
MainUnit<M> unitAnswer;
|
||||
if (unit.getCheck().checked(message)) {
|
||||
log.info("Проверка пройдена");
|
||||
log.debug("Unit: {}. Проверка пройдена", unit.getName());
|
||||
final BoxAnswer answerIfTrue = unit.getIntermediateAnswerIfTrue();
|
||||
if (checkNull(answerIfTrue)) sending.send(message.getPersonId(), answerIfTrue);
|
||||
unitAnswer = unit.getUnitTrue();
|
||||
} else {
|
||||
log.info("Проверка не пройдена");
|
||||
log.debug("Unit: {}. Проверка НЕ пройдена", unit.getName());
|
||||
final BoxAnswer answerIfFalse = unit.getIntermediateAnswerIfFalse();
|
||||
if (checkNull(answerIfFalse)) sending.send(message.getPersonId(), answerIfFalse);
|
||||
unitAnswer = unit.getUnitFalse();
|
||||
}
|
||||
log.debug("Завершилась обработка unit: {}.", unit.getName());
|
||||
return UnitRequest.of(Objects.requireNonNullElse(unitAnswer, unit), message);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package dev.struchkov.godfather.simple.core.unit;
|
||||
import dev.struchkov.autoresponder.entity.KeyWord;
|
||||
import dev.struchkov.godfather.main.core.unit.TypeUnit;
|
||||
import dev.struchkov.godfather.main.core.unit.UnitActiveType;
|
||||
import dev.struchkov.godfather.main.domain.BoxAnswer;
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
import dev.struchkov.godfather.simple.context.service.Accessibility;
|
||||
import dev.struchkov.godfather.simple.core.unit.func.CheckData;
|
||||
@ -36,6 +37,16 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
*/
|
||||
private final CheckData<M> check;
|
||||
|
||||
/**
|
||||
* Временный ответ. Отправляется сразу после проверки условия, если оно true. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка".
|
||||
*/
|
||||
private final BoxAnswer intermediateAnswerIfTrue;
|
||||
|
||||
/**
|
||||
* Промежуточный ответ. Отправляется сразу после проверки условия, если оно false. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка".
|
||||
*/
|
||||
private final BoxAnswer intermediateAnswerIfFalse;
|
||||
|
||||
private AnswerCheck(Builder<M> builder) {
|
||||
super(
|
||||
builder.name,
|
||||
@ -55,6 +66,8 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
unitTrue = builder.unitTrue;
|
||||
unitFalse = builder.unitFalse;
|
||||
check = builder.check;
|
||||
intermediateAnswerIfTrue = builder.intermediateAnswerIfTrue;
|
||||
intermediateAnswerIfFalse = builder.intermediateAnswerIfFalse;
|
||||
}
|
||||
|
||||
public static <M extends Message> Builder<M> builder() {
|
||||
@ -73,6 +86,14 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
return check;
|
||||
}
|
||||
|
||||
public BoxAnswer getIntermediateAnswerIfTrue() {
|
||||
return intermediateAnswerIfTrue;
|
||||
}
|
||||
|
||||
public BoxAnswer getIntermediateAnswerIfFalse() {
|
||||
return intermediateAnswerIfFalse;
|
||||
}
|
||||
|
||||
public static final class Builder<M extends Message> {
|
||||
private String name = UUID.randomUUID().toString();
|
||||
private String description;
|
||||
@ -92,6 +113,8 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
private MainUnit unitTrue;
|
||||
private MainUnit unitFalse;
|
||||
private CheckData<M> check;
|
||||
private BoxAnswer intermediateAnswerIfFalse;
|
||||
private BoxAnswer intermediateAnswerIfTrue;
|
||||
|
||||
private Builder() {
|
||||
}
|
||||
@ -209,6 +232,22 @@ public class AnswerCheck<M extends Message> extends MainUnit<M> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswer(BoxAnswer val) {
|
||||
intermediateAnswerIfTrue = val;
|
||||
intermediateAnswerIfFalse = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswerIfTrue(BoxAnswer val) {
|
||||
intermediateAnswerIfTrue = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder<M> intermediateAnswerIfFalse(BoxAnswer val) {
|
||||
intermediateAnswerIfFalse = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AnswerCheck<M> build() {
|
||||
// isNotNull(check, unitConfigException("Необходимо установить параметр проверки."));
|
||||
// Inspector.isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки."));
|
||||
|
2
pom.xml
2
pom.xml
@ -39,7 +39,7 @@
|
||||
<godfather.core.ver>${project.version}</godfather.core.ver>
|
||||
|
||||
<autoresponder.ver>3.5.0</autoresponder.ver>
|
||||
<haiti.utils>1.4.0</haiti.utils>
|
||||
<haiti.utils>2.2.0</haiti.utils>
|
||||
|
||||
<javax.persistence.api.ver>2.2</javax.persistence.api.ver>
|
||||
<validation.api.ver>2.0.1.Final</validation.api.ver>
|
||||
|
Loading…
Reference in New Issue
Block a user