From 80c240f9638a35f01ef28a6859ee589e2240cd3e Mon Sep 17 00:00:00 2001 From: Vince Jerald Villamora Date: Thu, 15 Dec 2022 23:49:05 +0800 Subject: [PATCH] feat(bot-api): add ui friendly usernames for bot api responses --- .../abavilla/fpi/bot/processor/EvtPcsr.java | 37 ++++++++++++------- .../fpi/bot/processor/MetaMsgEvtPcsr.java | 7 ++++ .../fpi/bot/processor/MoMsgEvtPcsr.java | 5 +++ .../fpi/bot/processor/TgMsgEvtPcsr.java | 21 +++++++++++ .../fpi/bot/processor/ViberMsgEvtPcsr.java | 7 ++++ .../com/abavilla/fpi/bot/util/BotConst.java | 2 + pom.xml | 6 +-- 7 files changed, 69 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/com/abavilla/fpi/bot/processor/EvtPcsr.java b/core/src/main/java/com/abavilla/fpi/bot/processor/EvtPcsr.java index cd91785..6d144ba 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/processor/EvtPcsr.java +++ b/core/src/main/java/com/abavilla/fpi/bot/processor/EvtPcsr.java @@ -60,20 +60,28 @@ public Uni processEvent(E evt) { Log.info("Processing event: " + getEventIdForLogging(evt)); I evtEntity = mapToEntity(evt); return evtLog.persist(evtEntity).chain(() -> { - Log.info("Logged to db: " + getEventIdForLogging(evt)); + // verify if person is registered - var login = new WebhookLoginDto(); - login.setUsername(getSenderFromEvt(evt)); - login.setBotSource(getBotSource().toString()); - Log.info("Authenticating user: " + login); - return loginApi.webhookAuthenticate(login) - // process load - .chain(session -> processLoadQuery(login, session, evt) - //load query exceptions - .onFailure(ApiSvcEx.class).recoverWithUni(ex -> - handleApiEx(evt, session.getResp().getUsername(), ex))) - // login failures - .onFailure(ApiSvcEx.class).recoverWithUni(ex -> handleApiEx(evt, ex)); + Log.info("Logged to db: " + getEventIdForLogging(evt)); + Uni prepWHLogin = getFriendlyUserName(evt).map(friendlyName -> { + var webhookLogin = new WebhookLoginDto(); + webhookLogin.setUsername(getSenderFromEvt(evt)); + webhookLogin.setBotSource(getBotSource().toString()); + webhookLogin.setFriendlyName(friendlyName); + return webhookLogin; + }); + + return prepWHLogin.chain(login -> { + Log.info("Authenticating user: " + login); + return loginApi.webhookAuthenticate(login) + // process load + .chain(session -> processLoadQuery(login, session, evt) + //load query exceptions + .onFailure(ApiSvcEx.class).recoverWithUni(ex -> + handleApiEx(evt, session.getResp().getUsername(), ex))) + // login failures + .onFailure(ApiSvcEx.class).recoverWithUni(ex -> handleApiEx(evt, ex)); + }); }) .onFailure(ex -> ex instanceof MongoWriteException wEx && wEx.getError().getCategory().equals(ErrorCategory.DUPLICATE_KEY)) @@ -156,4 +164,7 @@ private Uni sendResponse(E evt, String fpiUser, String msg) { protected abstract MsgrMsgReqDto createMsgReqFromEvt(E evt); protected abstract String getSenderFromEvt(E evt); + + protected abstract Uni getFriendlyUserName(E evt); + } diff --git a/core/src/main/java/com/abavilla/fpi/bot/processor/MetaMsgEvtPcsr.java b/core/src/main/java/com/abavilla/fpi/bot/processor/MetaMsgEvtPcsr.java index 103686f..c92864c 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/processor/MetaMsgEvtPcsr.java +++ b/core/src/main/java/com/abavilla/fpi/bot/processor/MetaMsgEvtPcsr.java @@ -34,6 +34,7 @@ import io.quarkus.logging.Log; import io.quarkus.vertx.ConsumeEvent; import io.smallrye.mutiny.Uni; +import org.apache.commons.lang3.StringUtils; @ApplicationScoped public class MetaMsgEvtPcsr extends EvtPcsr { @@ -96,6 +97,12 @@ public String getSenderFromEvt(MetaMsgEvtDto evt) { return evt.getSender(); } + @Override + protected Uni getFriendlyUserName(MetaMsgEvtDto evt) { + return msgrApi.getUserDtls(getSenderFromEvt(evt), StringUtils.EMPTY) + .map(apiResp -> apiResp.getResp().getName()); + } + @Override protected Uni sendMsgrMsg(MsgrMsgReqDto msgReq, String fpiUser) { return msgrApi.sendMsg(msgReq, fpiUser).replaceWithVoid(); diff --git a/core/src/main/java/com/abavilla/fpi/bot/processor/MoMsgEvtPcsr.java b/core/src/main/java/com/abavilla/fpi/bot/processor/MoMsgEvtPcsr.java index 130b332..773d95a 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/processor/MoMsgEvtPcsr.java +++ b/core/src/main/java/com/abavilla/fpi/bot/processor/MoMsgEvtPcsr.java @@ -102,4 +102,9 @@ protected MsgrMsgReqDto createMsgReqFromEvt(MOEvtDto evt) { protected String getSenderFromEvt(MOEvtDto evt) { return evt.getMobileNo(); } + + @Override + protected Uni getFriendlyUserName(MOEvtDto evt) { + return Uni.createFrom().item(getSenderFromEvt(evt)); + } } diff --git a/core/src/main/java/com/abavilla/fpi/bot/processor/TgMsgEvtPcsr.java b/core/src/main/java/com/abavilla/fpi/bot/processor/TgMsgEvtPcsr.java index 3d73692..d30d4ee 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/processor/TgMsgEvtPcsr.java +++ b/core/src/main/java/com/abavilla/fpi/bot/processor/TgMsgEvtPcsr.java @@ -23,6 +23,7 @@ import com.abavilla.fpi.bot.codec.TGUpdateEvtCodec; import com.abavilla.fpi.bot.entity.telegram.TelegramEvt; import com.abavilla.fpi.bot.repo.TgEvtRepo; +import com.abavilla.fpi.bot.util.BotConst; import com.abavilla.fpi.fw.util.DateUtil; import com.abavilla.fpi.load.ext.dto.QueryDto; import com.abavilla.fpi.msgr.ext.dto.MsgrMsgReqDto; @@ -32,6 +33,7 @@ import io.quarkus.logging.Log; import io.quarkus.vertx.ConsumeEvent; import io.smallrye.mutiny.Uni; +import org.apache.commons.lang3.StringUtils; @ApplicationScoped public class TgMsgEvtPcsr extends EvtPcsr { @@ -76,6 +78,25 @@ public String getSenderFromEvt(Update evt) { return String.valueOf(evt.message().from().id()); } + @Override + protected Uni getFriendlyUserName(Update evt) { + return Uni.createFrom().item(() -> { + String fname = evt.message().from().firstName(); + String lname = evt.message().from().lastName(); + String friendlyName = StringUtils.EMPTY; + if (StringUtils.isNotBlank(fname) && !StringUtils.equals(fname, BotConst.NULL_STR)) { + friendlyName += fname; + } + if (StringUtils.isNotBlank(lname) && !StringUtils.equals(lname, BotConst.NULL_STR)) { + friendlyName += StringUtils.SPACE + lname; + } + if (StringUtils.isBlank(friendlyName)) { + friendlyName = evt.message().from().username(); + } + return friendlyName; + }); + } + @Override protected Uni sendMsgrMsg(MsgrMsgReqDto msgReq, String fpiUser) { return msgrApi.sendMsg(msgReq, fpiUser).replaceWithVoid(); diff --git a/core/src/main/java/com/abavilla/fpi/bot/processor/ViberMsgEvtPcsr.java b/core/src/main/java/com/abavilla/fpi/bot/processor/ViberMsgEvtPcsr.java index 2ee5753..2586cd0 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/processor/ViberMsgEvtPcsr.java +++ b/core/src/main/java/com/abavilla/fpi/bot/processor/ViberMsgEvtPcsr.java @@ -33,6 +33,7 @@ import io.quarkus.logging.Log; import io.quarkus.vertx.ConsumeEvent; import io.smallrye.mutiny.Uni; +import org.apache.commons.lang3.StringUtils; @ApplicationScoped public class ViberMsgEvtPcsr extends EvtPcsr { @@ -90,6 +91,12 @@ protected String getSenderFromEvt(ViberUpdate evt) { return evt.getSender() == null ? evt.getUserId() : evt.getSender().getId(); } + @Override + protected Uni getFriendlyUserName(ViberUpdate evt) { + return msgrApi.getUserDtls(getSenderFromEvt(evt), StringUtils.EMPTY) + .map(resp -> resp.getResp().getUser().getName()); + } + @Override public BotSource getBotSource() { return BotSource.VIBER; diff --git a/core/src/main/java/com/abavilla/fpi/bot/util/BotConst.java b/core/src/main/java/com/abavilla/fpi/bot/util/BotConst.java index 2425eb1..1b5c7d9 100644 --- a/core/src/main/java/com/abavilla/fpi/bot/util/BotConst.java +++ b/core/src/main/java/com/abavilla/fpi/bot/util/BotConst.java @@ -31,5 +31,7 @@ public final class BotConst { public static final String PH_REGION_CODE = "PH"; + public static final String NULL_STR = "null"; + private BotConst() {} } diff --git a/pom.xml b/pom.xml index 6d389b3..12c5ddd 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ com.abavilla fpi-login-api - 1.5.1 + 1.6.0 @@ -91,7 +91,7 @@ com.abavilla fpi-msgr-api - 1.3.3 + 1.4.0 @@ -109,7 +109,7 @@ com.abavilla fpi-viber-plugin - 1.1.7 + 1.2.0