Skip to content

Commit

Permalink
i honestly don't think this code needs refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Shahriar-0 committed May 31, 2024
1 parent f5c1737 commit 536c2cd
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 170 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
Expand Down Expand Up @@ -253,7 +252,7 @@ public int getQuantity() {
if (status != OrderStatus.QUEUED) {
return super.getQuantity();
}

return displayedQuantity;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package ir.ramtung.tinyme.domain.entity;

import ir.ramtung.tinyme.domain.service.controls.ControlResult;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;

import ir.ramtung.tinyme.domain.service.controls.ControlResult;

public final class MatchResult {

private final MatchingOutcome outcome;
Expand All @@ -30,10 +29,14 @@ public static MatchResult notEnoughExecution() {

public static MatchResult createFromControlResult(ControlResult controlResult) {
switch (controlResult) {
case NOT_ENOUGH_POSITION : return notEnoughPositions();
case NOT_ENOUGH_CREDIT : return notEnoughCredit();
case NOT_ENOUGH_EXECUTION : return notEnoughExecution();
default : throw new UnknownError("Unknown Control Result");
case NOT_ENOUGH_POSITION:
return notEnoughPositions();
case NOT_ENOUGH_CREDIT:
return notEnoughCredit();
case NOT_ENOUGH_EXECUTION:
return notEnoughExecution();
default:
throw new UnknownError("Unknown Control Result");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@

@Service
public class AuctionMatchingControl extends MatchingControl {
public AuctionMatchingControl(PositionControl positionControl, CreditControl creditControl, QuantityControl quantityControl) {
super(positionControl, creditControl, quantityControl);
}

public AuctionMatchingControl(
PositionControl positionControl,
CreditControl creditControl,
QuantityControl quantityControl
) {
super(positionControl, creditControl, quantityControl);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ir.ramtung.tinyme.domain.service.controls;

public enum ControlResult {
OK,
NOT_ENOUGH_POSITION,
NOT_ENOUGH_CREDIT,
NOT_ENOUGH_EXECUTION
OK,
NOT_ENOUGH_POSITION,
NOT_ENOUGH_CREDIT,
NOT_ENOUGH_EXECUTION,
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ private void updateBuyerCreditAtTrade(Trade trade) {
long tradeValue = trade.getTradedValue();

// FIXME: need refactoring
// I don't understand why it needs refactoring. :(
if (!isBuyOrderQueued) {
buyerBroker.decreaseCreditBy(tradeValue);
} else if (trade.getPrice() < buyOrder.getPrice()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,57 +1,51 @@
package ir.ramtung.tinyme.domain.service.controls;

import java.util.List;

import ir.ramtung.tinyme.domain.entity.Order;
import ir.ramtung.tinyme.domain.entity.OrderBook;
import ir.ramtung.tinyme.domain.entity.Trade;
import java.util.List;

public abstract class MatchingControl {
protected PositionControl positionControl;
protected CreditControl creditControl;
protected QuantityControl quantityControl;

public MatchingControl(PositionControl positionControl, CreditControl creditControl, QuantityControl quantityControl) {
this.positionControl = positionControl;
this.creditControl = creditControl;
this.quantityControl = quantityControl;
}

public ControlResult checkBeforeMatching(Order targetOrder, OrderBook orderBook) {
return ControlResult.OK;
}

public void actionAtBeforeMatching(Order targetOrder, OrderBook orderBook) {

}

public void actionAtFailedBeforeMatching(Order targetOrder, OrderBook orderBook) {

}

public ControlResult checkBeforeMatch(Trade trade) {
return ControlResult.OK;
}

public void actionAtMatch(Trade trade, OrderBook orderBook) {
creditControl.updateCreditsAtTrade(trade);
quantityControl.updateQuantitiesAtTrade(trade, orderBook);
positionControl.updatePositionsAtTrade(trade);
}

public void actionAtFailedBeforeMatch(List<Trade> trades, OrderBook orderBook) {

}

public ControlResult checkAfterMatching(Order targetOrder, List<Trade> trades) {
return ControlResult.OK;
}

public void actionAtAfterMatching(Order targetOrder, OrderBook orderBook) {

}

public void actionAtfailedAfterMatching(List<Trade> trades, OrderBook orerrBook) {

}

protected PositionControl positionControl;
protected CreditControl creditControl;
protected QuantityControl quantityControl;

public MatchingControl(
PositionControl positionControl,
CreditControl creditControl,
QuantityControl quantityControl
) {
this.positionControl = positionControl;
this.creditControl = creditControl;
this.quantityControl = quantityControl;
}

public ControlResult checkBeforeMatching(Order targetOrder, OrderBook orderBook) {
return ControlResult.OK;
}

public void actionAtBeforeMatching(Order targetOrder, OrderBook orderBook) {}

public void actionAtFailedBeforeMatching(Order targetOrder, OrderBook orderBook) {}

public ControlResult checkBeforeMatch(Trade trade) {
return ControlResult.OK;
}

public void actionAtMatch(Trade trade, OrderBook orderBook) {
creditControl.updateCreditsAtTrade(trade);
quantityControl.updateQuantitiesAtTrade(trade, orderBook);
positionControl.updatePositionsAtTrade(trade);
}

public void actionAtFailedBeforeMatch(List<Trade> trades, OrderBook orderBook) {}

public ControlResult checkAfterMatching(Order targetOrder, List<Trade> trades) {
return ControlResult.OK;
}

public void actionAtAfterMatching(Order targetOrder, OrderBook orderBook) {}

public void actionAtfailedAfterMatching(List<Trade> trades, OrderBook orerrBook) {}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,32 @@
package ir.ramtung.tinyme.domain.service.controls;


import org.springframework.stereotype.Service;

import ir.ramtung.tinyme.domain.entity.Order;
import ir.ramtung.tinyme.domain.entity.OrderBook;
import ir.ramtung.tinyme.domain.entity.Security;
import ir.ramtung.tinyme.domain.entity.Shareholder;
import ir.ramtung.tinyme.domain.entity.Trade;
import org.springframework.stereotype.Service;

@Service
public class PositionControl {
public ControlResult checkPositionForOrder(Order order, OrderBook orderBook) {
if (order.isBuy()) {

public ControlResult checkPositionForOrder(Order order, OrderBook orderBook) {
if (order.isBuy()) {
return ControlResult.OK;
}

Shareholder shareholder = order.getShareholder();
Security security = order.getSecurity();
int salesAmount = order.getQuantity();
int salesAmount = order.getQuantity();
int queuedPositionAmount = orderBook.totalSellQuantityByShareholder(shareholder);
int totalNeededPosition = salesAmount + queuedPositionAmount;

if (shareholder.hasEnoughPositionsOn(security, totalNeededPosition)) {
return ControlResult.OK;
} else {
return ControlResult.NOT_ENOUGH_POSITION;
}
else {
return ControlResult.NOT_ENOUGH_POSITION;
}
}
}

public void updatePositionsAtTrade(Trade trade) {
updateBuyerPositionAtTrade(trade);
Expand Down Expand Up @@ -72,7 +70,7 @@ private void updateSellerPositionAtRollbackTrade(Trade trade) {
Shareholder sellerShareholder = sellOrder.getShareholder();
Security security = sellOrder.getSecurity();
int tradeQuantity = trade.getQuantity();

sellerShareholder.incPosition(security, tradeQuantity);
}
}
Loading

0 comments on commit 536c2cd

Please sign in to comment.