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