添加获取指定传输协议的消息协议接口

This commit is contained in:
ayan 2022-10-18 17:24:38 +08:00
parent 14d41cc706
commit 84c6e48f0e
1 changed files with 29 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Getter;
import org.hswebframework.utils.StringUtils;
import org.hswebframework.web.api.crud.entity.QueryParamEntity;
import org.hswebframework.web.authorization.annotation.Authorize;
import org.hswebframework.web.authorization.annotation.QueryAction;
import org.hswebframework.web.authorization.annotation.Resource;
@ -32,7 +33,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.function.Tuple2;
import reactor.util.function.Tuples;
import java.util.Comparator;
import java.util.List;
@RestController
@ -174,4 +178,29 @@ public class ProtocolSupportController
public Flux<ValueUnit> allUnits() {
return Flux.fromIterable(ValueUnits.getAllUnit());
}
@GetMapping("/supports/{transport}")
@Authorize(merge = false)
@Operation(summary = "获取支持指定传输协议的消息协议")
public Flux<ProtocolInfo> getSupportTransportProtocols(@PathVariable String transport,
@Parameter(hidden = true) QueryParamEntity query) {
return protocolSupports
.getProtocols()
.collectMap(ProtocolSupport::getId)
.flatMapMany(protocols -> service.createQuery()
.setParam(query)
.fetch()
.index()
.flatMap(tp2 -> Mono
.justOrEmpty(protocols.get(tp2.getT2().getId()))
.filterWhen(support -> support
.getSupportedTransport()
.filter(t -> t.isSame(transport))
.hasElements())
.map(ProtocolInfo::of)
.map(protocolInfo -> Tuples.of(tp2.getT1(), protocolInfo))))
.sort(Comparator.comparingLong(Tuple2::getT1))
.map(Tuple2::getT2);
}
}