mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Adjust bsq-swap-offer related gRPC daemon services
- Add GetOfferCategory service so CLI can determine what kind of takeoffer service is to be used. - Adjust to removal of BsqSwapOfferInfo proto. - Call new coreApi.getRole(BsqSwapTrade) before building BsqSwapTradeInfo proto.
This commit is contained in:
parent
5924312e64
commit
c6aceb0458
2 changed files with 63 additions and 26 deletions
|
@ -18,7 +18,6 @@
|
|||
package bisq.daemon.grpc;
|
||||
|
||||
import bisq.core.api.CoreApi;
|
||||
import bisq.core.api.model.BsqSwapOfferInfo;
|
||||
import bisq.core.api.model.OfferInfo;
|
||||
import bisq.core.offer.Offer;
|
||||
import bisq.core.offer.OpenOffer;
|
||||
|
@ -33,12 +32,15 @@ import bisq.proto.grpc.EditOfferReply;
|
|||
import bisq.proto.grpc.EditOfferRequest;
|
||||
import bisq.proto.grpc.GetBsqSwapOfferReply;
|
||||
import bisq.proto.grpc.GetBsqSwapOffersReply;
|
||||
import bisq.proto.grpc.GetBsqSwapOffersRequest;
|
||||
import bisq.proto.grpc.GetMyBsqSwapOfferReply;
|
||||
import bisq.proto.grpc.GetMyBsqSwapOffersReply;
|
||||
import bisq.proto.grpc.GetMyOfferReply;
|
||||
import bisq.proto.grpc.GetMyOfferRequest;
|
||||
import bisq.proto.grpc.GetMyOffersReply;
|
||||
import bisq.proto.grpc.GetMyOffersRequest;
|
||||
import bisq.proto.grpc.GetOfferCategoryReply;
|
||||
import bisq.proto.grpc.GetOfferCategoryRequest;
|
||||
import bisq.proto.grpc.GetOfferReply;
|
||||
import bisq.proto.grpc.GetOfferRequest;
|
||||
import bisq.proto.grpc.GetOffersReply;
|
||||
|
@ -56,10 +58,15 @@ import java.util.stream.Collectors;
|
|||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import static bisq.core.api.model.BsqSwapOfferInfo.toBsqSwapOfferInfo;
|
||||
import static bisq.core.api.model.OfferInfo.toMyPendingOfferInfo;
|
||||
import static bisq.core.api.model.OfferInfo.toOfferInfo;
|
||||
import static bisq.core.api.model.OfferInfo.toPendingOfferInfo;
|
||||
import static bisq.daemon.grpc.interceptor.GrpcServiceRateMeteringConfig.getCustomRateMeteringInterceptor;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.ALTCOIN;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.BSQ_SWAP;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.FIAT;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.OfferCategory.UNKNOWN;
|
||||
import static bisq.proto.grpc.GetOfferCategoryReply.newBuilder;
|
||||
import static bisq.proto.grpc.OffersGrpc.*;
|
||||
import static java.util.concurrent.TimeUnit.MINUTES;
|
||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
|
@ -81,13 +88,28 @@ class GrpcOffersService extends OffersImplBase {
|
|||
this.exceptionHandler = exceptionHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getOfferCategory(GetOfferCategoryRequest req,
|
||||
StreamObserver<GetOfferCategoryReply> responseObserver) {
|
||||
try {
|
||||
OfferCategory category = getAvailableOfferCategory(req.getId());
|
||||
var reply = newBuilder()
|
||||
.setOfferCategory(category)
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
} catch (Throwable cause) {
|
||||
exceptionHandler.handleException(log, cause, responseObserver);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getBsqSwapOffer(GetOfferRequest req,
|
||||
StreamObserver<GetBsqSwapOfferReply> responseObserver) {
|
||||
try {
|
||||
Offer offer = coreApi.getOffer(req.getId());
|
||||
var reply = GetBsqSwapOfferReply.newBuilder()
|
||||
.setBsqSwapOffer(toBsqSwapOfferInfo(offer).toProtoMessage())
|
||||
.setBsqSwapOffer(toOfferInfo(offer).toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -117,7 +139,7 @@ class GrpcOffersService extends OffersImplBase {
|
|||
try {
|
||||
Offer offer = coreApi.getMyBsqSwapOffer(req.getId());
|
||||
var reply = GetMyBsqSwapOfferReply.newBuilder()
|
||||
.setBsqSwapOffer(toBsqSwapOfferInfo(offer /* TODO support triggerPrice */).toProtoMessage())
|
||||
.setBsqSwapOffer(toOfferInfo(offer /* TODO support triggerPrice */).toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -132,7 +154,7 @@ class GrpcOffersService extends OffersImplBase {
|
|||
try {
|
||||
OpenOffer openOffer = coreApi.getMyOffer(req.getId());
|
||||
var reply = GetMyOfferReply.newBuilder()
|
||||
.setOffer(toOfferInfo(openOffer).toProtoMessage())
|
||||
.setOffer(OfferInfo.toMyOfferInfo(openOffer).toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -142,15 +164,15 @@ class GrpcOffersService extends OffersImplBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void getBsqSwapOffers(GetOffersRequest req,
|
||||
public void getBsqSwapOffers(GetBsqSwapOffersRequest req,
|
||||
StreamObserver<GetBsqSwapOffersReply> responseObserver) {
|
||||
try {
|
||||
List<BsqSwapOfferInfo> result = coreApi.getBsqSwapOffers(req.getDirection())
|
||||
.stream().map(BsqSwapOfferInfo::toBsqSwapOfferInfo)
|
||||
List<OfferInfo> result = coreApi.getBsqSwapOffers(req.getDirection())
|
||||
.stream().map(OfferInfo::toOfferInfo)
|
||||
.collect(Collectors.toList());
|
||||
var reply = GetBsqSwapOffersReply.newBuilder()
|
||||
.addAllBsqSwapOffers(result.stream()
|
||||
.map(BsqSwapOfferInfo::toProtoMessage)
|
||||
.map(OfferInfo::toProtoMessage)
|
||||
.collect(Collectors.toList()))
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
|
@ -180,15 +202,15 @@ class GrpcOffersService extends OffersImplBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void getMyBsqSwapOffers(GetMyOffersRequest req,
|
||||
public void getMyBsqSwapOffers(GetBsqSwapOffersRequest req,
|
||||
StreamObserver<GetMyBsqSwapOffersReply> responseObserver) {
|
||||
try {
|
||||
List<BsqSwapOfferInfo> result = coreApi.getMyBsqSwapOffers(req.getDirection())
|
||||
.stream().map(BsqSwapOfferInfo::toBsqSwapOfferInfo)
|
||||
List<OfferInfo> result = coreApi.getMyBsqSwapOffers(req.getDirection())
|
||||
.stream().map(OfferInfo::toOfferInfo)
|
||||
.collect(Collectors.toList());
|
||||
var reply = GetMyBsqSwapOffersReply.newBuilder()
|
||||
.addAllBsqSwapOffers(result.stream()
|
||||
.map(BsqSwapOfferInfo::toProtoMessage)
|
||||
.map(OfferInfo::toProtoMessage)
|
||||
.collect(Collectors.toList()))
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
|
@ -204,7 +226,7 @@ class GrpcOffersService extends OffersImplBase {
|
|||
try {
|
||||
List<OfferInfo> result = coreApi.getMyOffers(req.getDirection(), req.getCurrencyCode())
|
||||
.stream()
|
||||
.map(OfferInfo::toOfferInfo)
|
||||
.map(OfferInfo::toMyOfferInfo)
|
||||
.collect(Collectors.toList());
|
||||
var reply = GetMyOffersReply.newBuilder()
|
||||
.addAllOffers(result.stream()
|
||||
|
@ -222,17 +244,15 @@ class GrpcOffersService extends OffersImplBase {
|
|||
public void createBsqSwapOffer(CreateBsqSwapOfferRequest req,
|
||||
StreamObserver<CreateBsqSwapOfferReply> responseObserver) {
|
||||
try {
|
||||
//todo PaymentAccount for bsq swap not needed as its just a dummy account
|
||||
coreApi.createAndPlaceBsqSwapOffer(
|
||||
req.getDirection(),
|
||||
req.getAmount(),
|
||||
req.getMinAmount(),
|
||||
req.getPrice(),
|
||||
/* req.getPaymentAccountId(),*/
|
||||
offer -> {
|
||||
BsqSwapOfferInfo bsqSwapOfferInfo = toBsqSwapOfferInfo(offer);
|
||||
OfferInfo offerInfo = toMyPendingOfferInfo(offer);
|
||||
CreateBsqSwapOfferReply reply = CreateBsqSwapOfferReply.newBuilder()
|
||||
.setBsqSwapOffer(bsqSwapOfferInfo.toProtoMessage())
|
||||
.setBsqSwapOffer(offerInfo.toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -261,7 +281,7 @@ class GrpcOffersService extends OffersImplBase {
|
|||
offer -> {
|
||||
// This result handling consumer's accept operation will return
|
||||
// the new offer to the gRPC client after async placement is done.
|
||||
OfferInfo offerInfo = toPendingOfferInfo(offer);
|
||||
OfferInfo offerInfo = toMyPendingOfferInfo(offer);
|
||||
CreateOfferReply reply = CreateOfferReply.newBuilder()
|
||||
.setOffer(offerInfo.toProtoMessage())
|
||||
.build();
|
||||
|
@ -325,4 +345,15 @@ class GrpcOffersService extends OffersImplBase {
|
|||
}}
|
||||
)));
|
||||
}
|
||||
|
||||
private OfferCategory getAvailableOfferCategory(String offerId) {
|
||||
if (coreApi.isAvailableAltcoinOffer(offerId))
|
||||
return ALTCOIN;
|
||||
else if (coreApi.isAvailableFiatOffer(offerId))
|
||||
return FIAT;
|
||||
else if (coreApi.isAvailableBsqSwapOffer(offerId))
|
||||
return BSQ_SWAP;
|
||||
else
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,9 +78,10 @@ class GrpcTradesService extends TradesImplBase {
|
|||
StreamObserver<GetBsqSwapTradeReply> responseObserver) {
|
||||
try {
|
||||
var bsqSwapTrade = coreApi.getBsqSwapTrade(req.getTradeId());
|
||||
// String role = coreApi.getBsqSwapTradeRole(req.getTradeId());
|
||||
boolean wasMyOffer = coreApi.isMyOffer(bsqSwapTrade.getOffer().getId());
|
||||
String role = coreApi.getBsqSwapTradeRole(req.getTradeId());
|
||||
var reply = GetBsqSwapTradeReply.newBuilder()
|
||||
.setBsqSwapTrade(toBsqSwapTradeInfo(bsqSwapTrade).toProtoMessage())
|
||||
.setBsqSwapTrade(toBsqSwapTradeInfo(bsqSwapTrade, role, wasMyOffer).toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -97,7 +98,7 @@ class GrpcTradesService extends TradesImplBase {
|
|||
public void takeBsqSwapOffer(TakeBsqSwapOfferRequest req,
|
||||
StreamObserver<TakeBsqSwapOfferReply> responseObserver) {
|
||||
GrpcErrorMessageHandler errorMessageHandler =
|
||||
new GrpcErrorMessageHandler(getTakeOfferMethod().getFullMethodName(),
|
||||
new GrpcErrorMessageHandler(getTakeBsqSwapOfferMethod().getFullMethodName(),
|
||||
responseObserver,
|
||||
exceptionHandler,
|
||||
log);
|
||||
|
@ -105,7 +106,10 @@ class GrpcTradesService extends TradesImplBase {
|
|||
req.getPaymentAccountId(),
|
||||
req.getTakerFeeCurrencyCode(),
|
||||
bsqSwapTrade -> {
|
||||
BsqSwapTradeInfo bsqSwapTradeInfo = toBsqSwapTradeInfo(bsqSwapTrade);
|
||||
String role = coreApi.getBsqSwapTradeRole(bsqSwapTrade);
|
||||
BsqSwapTradeInfo bsqSwapTradeInfo = toBsqSwapTradeInfo(bsqSwapTrade,
|
||||
role,
|
||||
false);
|
||||
var reply = TakeBsqSwapOfferReply.newBuilder()
|
||||
.setBsqSwapTrade(bsqSwapTradeInfo.toProtoMessage())
|
||||
.build();
|
||||
|
@ -123,10 +127,10 @@ class GrpcTradesService extends TradesImplBase {
|
|||
StreamObserver<GetTradeReply> responseObserver) {
|
||||
try {
|
||||
Trade trade = coreApi.getTrade(req.getTradeId());
|
||||
boolean isMyOffer = coreApi.isMyOffer(trade.getOffer().getId());
|
||||
boolean wasMyOffer = coreApi.isMyOffer(trade.getOffer().getId());
|
||||
String role = coreApi.getTradeRole(req.getTradeId());
|
||||
var reply = GetTradeReply.newBuilder()
|
||||
.setTrade(toTradeInfo(trade, role, isMyOffer).toProtoMessage())
|
||||
.setTrade(toTradeInfo(trade, role, wasMyOffer).toProtoMessage())
|
||||
.build();
|
||||
responseObserver.onNext(reply);
|
||||
responseObserver.onCompleted();
|
||||
|
@ -227,7 +231,9 @@ class GrpcTradesService extends TradesImplBase {
|
|||
.or(() -> Optional.of(CallRateMeteringInterceptor.valueOf(
|
||||
new HashMap<>() {{
|
||||
put(getGetTradeMethod().getFullMethodName(), new GrpcCallRateMeter(1, SECONDS));
|
||||
put(getGetBsqSwapTradeMethod().getFullMethodName(), new GrpcCallRateMeter(1, SECONDS));
|
||||
put(getTakeOfferMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
|
||||
put(getTakeBsqSwapOfferMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
|
||||
put(getConfirmPaymentStartedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
|
||||
put(getConfirmPaymentReceivedMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
|
||||
put(getKeepFundsMethod().getFullMethodName(), new GrpcCallRateMeter(1, MINUTES));
|
||||
|
|
Loading…
Add table
Reference in a new issue