Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import org.scoula.backend.member.domain.Account;
import org.scoula.backend.member.domain.Holdings;
import org.scoula.backend.member.exception.HoldingsNotFoundException;
import org.scoula.backend.member.repository.impls.HoldingsRepositoryImpl;
import org.scoula.backend.member.domain.Company;
import org.scoula.backend.member.service.reposiotry.CompanyRepository;
import org.scoula.backend.member.service.reposiotry.HoldingsRepository;
Expand Down Expand Up @@ -126,7 +125,7 @@ public void processOrder(final Order order) {
// 종목별 주문장 생성, 이미 존재할 경우 반환
public OrderBook addOrderBook(final String companyCode) {
return orderBooks.computeIfAbsent(companyCode, k ->
new OrderBook(companyCode, tradeHistoryService));
new OrderBook(companyCode));
}

// 주문 발생 시 호가창 업데이트 브로드캐스트
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import org.scoula.backend.order.domain.TradeOrder;
import org.scoula.backend.order.domain.Type;
import org.scoula.backend.order.dto.PriceLevelDto;
import org.scoula.backend.order.service.TradeHistoryService;
import org.scoula.backend.order.service.exception.MatchingException;

import lombok.extern.slf4j.Slf4j;
Expand All @@ -39,7 +38,7 @@ public class OrderBook {
/**
* 생성자
*/
public OrderBook(final String companyCode, TradeHistoryService tradeHistoryService) {
public OrderBook(final String companyCode) {
this.companyCode = companyCode;
}

Expand Down Expand Up @@ -80,9 +79,7 @@ private List<TradeHistoryResponse> matchMarketSellOrder(final TradeOrder sellOrd

// 매수 큐가 비었으면 제거
if (bestBuy.getValue().isEmpty()) {
synchronized (bestBuy.getKey()) {
buyOrders.remove(bestBuy.getKey());
}
buyOrders.remove(bestBuy.getKey());
}
}
return responses;
Expand All @@ -106,9 +103,7 @@ private List<TradeHistoryResponse> matchMarketBuyOrder(final TradeOrder buyOrder

// 매도 큐가 비었으면 제거
if (bestSell.getValue().isEmpty()) {
synchronized (bestSell.getKey()) {
sellOrders.remove(bestSell.getKey());
}
sellOrders.remove(bestSell.getKey());
}
}
return responses;
Expand All @@ -133,7 +128,7 @@ private List<TradeHistoryResponse> matchSellOrder(final TradeOrder sellOrder) {
// 매도가보다 높거나 같은 매수 주문 찾기
Map.Entry<Price, OrderStorage> bestBuy = buyOrders.firstEntry();

if (bestBuy == null || bestBuy.getKey().isHigherThan(sellOrder.getPrice())) {
if (bestBuy == null || bestBuy.getKey().isLowerThan(sellOrder.getPrice())) {
// 매칭되는 매수 주문이 없으면 주문장에 추가
if (sellOrder.getPrice().compareTo(BigDecimal.ZERO) != 0) {
addToOrderBook(sellOrders, sellOrder);
Expand Down Expand Up @@ -161,7 +156,7 @@ private List<TradeHistoryResponse> matchBuyOrder(final TradeOrder buyOrder) {
// 매수가보다 낮거나 같은 매도 주문 찾기
Map.Entry<Price, OrderStorage> bestSell = sellOrders.firstEntry();

if (bestSell == null || bestSell.getKey().isLowerThan(buyOrder.getPrice())) {
if (bestSell == null || bestSell.getKey().isHigherThan(buyOrder.getPrice())) {
if (buyOrder.getPrice().compareTo(BigDecimal.ZERO) != 0) {
addToOrderBook(buyOrders, buyOrder);
}
Expand All @@ -173,7 +168,7 @@ private List<TradeHistoryResponse> matchBuyOrder(final TradeOrder buyOrder) {

// 매수 큐가 비었으면 제거
if (bestSell.getValue().isEmpty()) {
buyOrders.remove(bestSell.getKey());
sellOrders.remove(bestSell.getKey());
}
}
return responses;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.TreeMap;

import org.junit.jupiter.api.DisplayName;
Expand All @@ -24,7 +23,6 @@
import org.scoula.backend.order.controller.response.OrderSnapshotResponse;
import org.scoula.backend.order.controller.response.OrderSummaryResponse;
import org.scoula.backend.order.controller.response.TradeHistoryResponse;
import org.scoula.backend.order.domain.Order;
import org.scoula.backend.order.domain.OrderStatus;
import org.scoula.backend.order.domain.Type;
import org.scoula.backend.order.dto.PriceLevelDto;
Expand Down Expand Up @@ -173,15 +171,6 @@ void orderSuccess() throws Exception {
.andExpect(status().isOk());
}

@Test
@DisplayName("사용자 정보가 존재하지 않는 경우 주문 실패")
void failedOrderWhenUserIsUnauthorized() throws Exception {
mockMvc.perform(post("/api/order")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isForbidden());
}

@Test
@DisplayName("사용자 정보가 존재하지 않는 경우 예외를 발생시키고 404 Not Found를 반환한다.")
@WithMockUserDetails
Expand Down
Loading