diff --git a/Controllers/Fubon.cs b/Controllers/Fubon.cs index 32f8814..b8a18f2 100644 --- a/Controllers/Fubon.cs +++ b/Controllers/Fubon.cs @@ -9,6 +9,7 @@ namespace fubon_api.Controllers; public class FubonSdkController : ControllerBase { private readonly FubonSDK _sdk; + private static Account account; private readonly ILogger _logger; public FubonSdkController(ILogger logger, FubonSDK sdk) @@ -24,9 +25,51 @@ public class FubonSdkController : ControllerBase { throw new ArgumentException("Invalid login request."); } - - var result = _sdk.Login(request.Id, request.Password,"Your Cert Path","Your Cert Password"); + + var result = _sdk.Login(request.Id, request.Password, "Your Cert Path", "Your Cert Password"); + account = result.data[0]; return result; } + + [HttpPost("PlaceOrder")] + public bool PlaceOrder([FromBody] OrderRequest request) + { + var order = new Order( + request.GetBuySellEnum(), + request.Symbol, + request.Price, + request.Quantity, + request.GetMarketTypeEnum(), + request.GetPriceType(), + request.GetTimeInForceEnum(), + request.GetOrderTypeEnum(), + null + ); + + _sdk.Stock.PlaceOrder(account, order); + Console.WriteLine(request.ToString()); + + return true; + } + + [HttpGet("OrderResult")] + public IEnumerable GetOrderResult() + { + var orderResults = _sdk.Stock.GetOrderResults(account); + return orderResults.data; + } + + [HttpPost("ModifyOrder")] + public bool ModifyOrder() + { + /* + todo : + input 1. orderResult 2. Type: price, quantity + modify price method + modify quantity method + */ + + return true; + } } \ No newline at end of file diff --git a/Models/OrderRequest.cs b/Models/OrderRequest.cs new file mode 100644 index 0000000..3e7eb4c --- /dev/null +++ b/Models/OrderRequest.cs @@ -0,0 +1,66 @@ +using FubonNeo.Sdk; + +public class OrderRequest +{ + public string BuySell { get; set; } + public string Symbol { get; set; } + public string? Price { get; set; } + public long Quantity { get; set; } + public string MarketType { get; set; } + public string PriceType { get; set; } + public string TimeInForce { get; set; } + public string OrderType { get; set; } + public string? UserDef { get; set; } + + public OrderRequest( + string buySell, + string symbol, + string? price, + long quantity, + string marketType, + string priceType, + string timeInForce, + string orderType, + string? userDef) + { + BuySell = buySell; + Symbol = symbol; + Price = price; + Quantity = quantity; + MarketType = marketType; + PriceType = priceType; + TimeInForce = timeInForce; + OrderType = orderType; + UserDef = userDef; + } + + public BsAction GetBuySellEnum() + { + return Enum.TryParse(BuySell, true, out BsAction result) ? result : BsAction.UnDefined; + } + + public MarketType GetMarketTypeEnum() + { + return Enum.TryParse(MarketType, true, out MarketType result) ? result : FubonNeo.Sdk.MarketType.UnDefined; + } + + public PriceType GetPriceType() + { + return Enum.TryParse(PriceType, true, out PriceType result) ? result : FubonNeo.Sdk.PriceType.UnDefined; + } + + public TimeInForce GetTimeInForceEnum() + { + return Enum.TryParse(TimeInForce, true, out TimeInForce result) ? result : FubonNeo.Sdk.TimeInForce.UnDefined; + } + + public OrderType GetOrderTypeEnum() + { + return Enum.TryParse(OrderType, true, out OrderType result) ? result : FubonNeo.Sdk.OrderType.UnDefined; + } + + public override string ToString() + { + return $"Order Request: {BuySell}, {Symbol}, {Price}, {Quantity}, {MarketType}, {PriceType}, {TimeInForce}, {OrderType}, {UserDef}"; + } +} \ No newline at end of file