Created
March 17, 2024 16:00
-
-
Save serrodcal/bf70923208d0b589364850d95d27337a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Entity | |
@Cacheable | |
public class OrderEntity extends PanacheEntityBase { | |
@Id | |
@SequenceGenerator(allocationSize = 1,name = "orderEntitySequence", schema = "public", sequenceName = "order_entity_seq") | |
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "orderEntitySequence") | |
@Column(name = "id", nullable = false) | |
public Long id; | |
public UUID uuid; | |
public OrderStatus status; | |
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) | |
public List<OrderItemEntity> orderItemEntities; | |
public BigDecimal price; | |
@CreationTimestamp public LocalDateTime createdAt; | |
@UpdateTimestamp public LocalDateTime updatedAt; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Entity | |
@Cacheable | |
public class OrderItemEntity extends PanacheEntityBase { | |
@Id | |
@SequenceGenerator(allocationSize = 1,name = "orderItemEntitySequence", schema = "public", sequenceName = "order_item_entity_seq") | |
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "orderItemEntitySequence") | |
@Column(name = "id", nullable = false) | |
public Long id; | |
public UUID productId; | |
public BigDecimal price; | |
@CreationTimestamp public LocalDateTime createdAt; | |
@UpdateTimestamp public LocalDateTime updatedAt; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public record OrderItemResponse(UUID uuid, BigDecimal price) {} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Singleton | |
public class OrderRepository implements PanacheRepository<OrderEntity> {} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Singleton | |
@RouteBase(path = "/v1", consumes = "application/json", produces = "application/json") | |
public class OrderResource { | |
private static final Logger log = Logger.getLogger(OrderResource.class.getName()); | |
@Inject | |
OrderRepository orderRepository; | |
@Route(path = "/orders", methods = HttpMethod.GET) | |
@Timeout(250) | |
@WithSession | |
public Uni<PaginatedResponse<List<OrderResponse>>> orders() { // @Param Integer page, @Param Integer size, @Param Long start, @Param Long end | |
log.trace("OrderResource.orders()"); | |
Uni<Long> countUni = orderRepository.count(); | |
Uni<List<OrderResponse>> entitiesUni = orderRepository.listAll().onItem().ifNotNull().transform(i -> { | |
List<OrderResponse> res = new ArrayList<>(); | |
for (OrderEntity e : i) { | |
int status = 0; | |
if (e.status == OrderStatus.COMPLETED) | |
status = 1; | |
List<OrderItemResponse> resItems = e.orderItemEntities.stream().map(item -> new OrderItemResponse(item.productId, item.price)).toList(); | |
res.add(new OrderResponse(e.id, e.uuid, status, resItems, e.price, e.createdAt, e.updatedAt)); | |
} | |
return res; | |
}); | |
return Uni.combine().all().unis(countUni, entitiesUni).asTuple().onItem().ifNotNull().transform(i -> { | |
return new PaginatedResponse<List<OrderResponse>>(i.getItem1(), i.getItem2()); | |
}); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public record OrderResponse( | |
Long id, | |
UUID uuid, | |
int status, | |
List<OrderItemResponse> items, | |
BigDecimal price, | |
LocalDateTime createdAt, | |
LocalDateTime updatedAt | |
) {} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2024-03-17 16:59:48,752 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (vert.x-eventloop-thread-3) HTTP Request to /v1/orders failed, error id: 713b0773-37bd-467e-804e-15d540814844-1: java.lang.IllegalStateException: Illegal pop() with non-matching JdbcValuesSourceProcessingState | |
at org.hibernate.sql.results.spi.LoadContexts.deregister(LoadContexts.java:45) | |
at org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer.finishUp(ReactiveListResultsConsumer.java:188) | |
at org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer.lambda$consume$3(ReactiveListResultsConsumer.java:120) | |
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646) | |
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) | |
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179) | |
at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:131) | |
at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:126) | |
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) | |
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) | |
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) | |
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179) | |
at io.vertx.core.Future.lambda$toCompletionStage$3(Future.java:581) | |
at io.vertx.core.impl.future.FutureImpl$4.onSuccess(FutureImpl.java:176) | |
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:66) | |
at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:246) | |
at io.vertx.sqlclient.impl.QueryResultBuilder.tryComplete(QueryResultBuilder.java:88) | |
at io.vertx.sqlclient.impl.QueryResultBuilder.tryComplete(QueryResultBuilder.java:32) | |
at io.vertx.core.Promise.complete(Promise.java:66) | |
at io.vertx.core.Promise.handle(Promise.java:51) | |
at io.vertx.core.Promise.handle(Promise.java:29) | |
at io.vertx.core.impl.future.FutureImpl$4.onSuccess(FutureImpl.java:176) | |
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:66) | |
at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:246) | |
at io.vertx.core.impl.future.Transformation$1.onSuccess(Transformation.java:63) | |
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:66) | |
at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:231) | |
at io.vertx.core.impl.future.Transformation.onSuccess(Transformation.java:44) | |
at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:60) | |
at io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:305) | |
at io.vertx.core.impl.DuplicatedContext.execute(DuplicatedContext.java:181) | |
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:57) | |
at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:246) | |
at io.vertx.core.impl.future.PromiseImpl.onSuccess(PromiseImpl.java:49) | |
at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:41) | |
at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:23) | |
at io.vertx.sqlclient.impl.command.CommandResponse.fire(CommandResponse.java:46) | |
at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:324) | |
at io.vertx.pgclient.impl.PgSocketConnection.handleMessage(PgSocketConnection.java:114) | |
at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:137) | |
at io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:335) | |
at io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:328) | |
at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:388) | |
at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:159) | |
at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) | |
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) | |
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) | |
at io.vertx.pgclient.impl.codec.PgDecoder.fireCommandResponse(PgDecoder.java:52) | |
at io.vertx.pgclient.impl.codec.PgCommandCodec.handleReadyForQuery(PgCommandCodec.java:137) | |
at io.vertx.pgclient.impl.codec.PgDecoder.decodeReadyForQuery(PgDecoder.java:248) | |
at io.vertx.pgclient.impl.codec.PgDecoder.channelRead(PgDecoder.java:107) | |
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) | |
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) | |
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) | |
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) | |
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) | |
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) | |
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) | |
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) | |
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) | |
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) | |
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) | |
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) | |
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) | |
at java.base/java.lang.Thread.run(Thread.java:1583) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public record PaginatedResponse<T> ( | |
Long count, | |
T payload | |
) {} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment