Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/java/com/coinflow/market/dto/OrderBookResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ private static List<PriceLevel> aggregate(
return quantitiesByPrice.entrySet().stream()
.limit(depth)
.map(entry -> new PriceLevel(
entry.getKey().toPlainString(),
entry.getValue().toPlainString()
entry.getKey().stripTrailingZeros().toPlainString(),
entry.getValue().stripTrailingZeros().toPlainString()
))
.toList();
}
Expand Down
18 changes: 3 additions & 15 deletions src/main/java/com/coinflow/order/api/OrderController.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.coinflow.order.api;

import com.coinflow.order.dto.CancelOrderResponse;
import com.coinflow.order.dto.AcceptedOrderResponse;
import com.coinflow.order.dto.CancelOrderResponse;
import com.coinflow.order.dto.CreateOrderRequest;
import com.coinflow.order.dto.CreateOrderResponse;
import com.coinflow.order.dto.OrderDetailResponse;
import com.coinflow.order.dto.OrderSummaryResponse;
import com.coinflow.order.service.OrderService;
Expand All @@ -22,7 +21,6 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
Expand All @@ -36,23 +34,13 @@ public class OrderController {
private final OrderService orderService;

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public CreateOrderResponse createOrder(
@AuthenticationPrincipal Jwt jwt,
@Valid @RequestBody CreateOrderRequest request
) {
Long userId = Long.parseLong(jwt.getSubject());
return orderService.createOrder(userId, request);
}

@PostMapping("/async")
public ResponseEntity<AcceptedOrderResponse> acceptOrder(
public ResponseEntity<AcceptedOrderResponse> createOrder(
@AuthenticationPrincipal Jwt jwt,
@Valid @RequestBody CreateOrderRequest request
) {
Long userId = Long.parseLong(jwt.getSubject());
return ResponseEntity.status(HttpStatus.ACCEPTED)
.body(orderService.acceptOrder(userId, request));
.body(orderService.createOrder(userId, request));
}

@PostMapping("/{id}/cancel")
Expand Down
67 changes: 0 additions & 67 deletions src/main/java/com/coinflow/order/dto/CreateOrderResponse.java

This file was deleted.

42 changes: 1 addition & 41 deletions src/main/java/com/coinflow/order/service/OrderService.java
Original file line number Diff line number Diff line change
@@ -1,74 +1,34 @@
package com.coinflow.order.service;

import com.coinflow.common.exception.ApiException;
import com.coinflow.common.exception.ErrorCode;
import com.coinflow.market.domain.Market;
import com.coinflow.market.repository.MarketRepository;
import com.coinflow.order.domain.OrderSide;
import com.coinflow.order.dto.AcceptedOrderResponse;
import com.coinflow.order.dto.CancelOrderResponse;
import com.coinflow.order.dto.CreateOrderRequest;
import com.coinflow.order.dto.CreateOrderResponse;
import com.coinflow.order.dto.OrderDetailResponse;
import com.coinflow.order.dto.OrderSummaryResponse;
import com.coinflow.order.service.cancel.OrderCancelService;
import com.coinflow.order.service.command.CreateOrderCommand;
import com.coinflow.order.service.command.MarketOrderCommandQueue;
import com.coinflow.order.service.processor.SyncOrderProcessor;
import com.coinflow.order.service.query.OrderQueryService;
import com.coinflow.order.service.support.ClientOrderIdService;
import com.coinflow.order.service.support.OrderCreateValidator;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OrderService {

private final MarketRepository marketRepository;
private final OrderCreateValidator orderCreateValidator;
private final ClientOrderIdService clientOrderIdService;
private final MarketOrderCommandQueue marketOrderCommandQueue;
private final SyncOrderProcessor syncOrderProcessor;
private final AcceptedOrderService acceptedOrderService;
private final OrderCancelService orderCancelService;
private final OrderQueryService orderQueryService;

public OrderService(
MarketRepository marketRepository,
OrderCreateValidator orderCreateValidator,
ClientOrderIdService clientOrderIdService,
MarketOrderCommandQueue marketOrderCommandQueue,
SyncOrderProcessor syncOrderProcessor,
AcceptedOrderService acceptedOrderService,
OrderCancelService orderCancelService,
OrderQueryService orderQueryService
) {
this.marketRepository = marketRepository;
this.orderCreateValidator = orderCreateValidator;
this.clientOrderIdService = clientOrderIdService;
this.marketOrderCommandQueue = marketOrderCommandQueue;
this.syncOrderProcessor = syncOrderProcessor;
this.acceptedOrderService = acceptedOrderService;
this.orderCancelService = orderCancelService;
this.orderQueryService = orderQueryService;
}

public CreateOrderResponse createOrder(Long currentUserId, CreateOrderRequest request) {
Market market = marketRepository.findBySymbol(request.market())
.orElseThrow(() -> new ApiException(ErrorCode.MARKET_NOT_FOUND));
CreateOrderCommand command = orderCreateValidator.validate(market, request);
OrderSide side = command.side();
clientOrderIdService.validateUnique(currentUserId, request, market, side);

return marketOrderCommandQueue.submit(
market,
side,
() -> syncOrderProcessor.process(currentUserId, request, market, command)
);
}

public AcceptedOrderResponse acceptOrder(Long currentUserId, CreateOrderRequest request) {
public AcceptedOrderResponse createOrder(Long currentUserId, CreateOrderRequest request) {
return acceptedOrderService.acceptOrder(currentUserId, request);
}

Expand Down

This file was deleted.

Loading
Loading