From 6a82898765fdcc33998c39fe4884ebccf25c5287 Mon Sep 17 00:00:00 2001 From: MH Hung Date: Fri, 1 Aug 2025 13:38:36 +0800 Subject: [PATCH] feat : change api name, add account route api, add methods --- Controllers/Account.cs | 67 ++++++++++++++++++++++++++++++ Controllers/{Fubon.cs => Trade.cs} | 29 ++++--------- Program.cs | 1 + 3 files changed, 76 insertions(+), 21 deletions(-) create mode 100644 Controllers/Account.cs rename Controllers/{Fubon.cs => Trade.cs} (60%) diff --git a/Controllers/Account.cs b/Controllers/Account.cs new file mode 100644 index 0000000..da000c6 --- /dev/null +++ b/Controllers/Account.cs @@ -0,0 +1,67 @@ +using fubon_api.Models; +using FubonNeo.Sdk; +using Microsoft.AspNetCore.Mvc; + +namespace fubon_api.Controllers; + +[ApiController] +[Route("account/[controller]")] +public class FubonSdkAccountController : ControllerBase +{ + private readonly FubonSDK _sdk; + private Account _account; + private readonly ILogger _logger; + + public FubonSdkAccountController(ILogger logger, FubonSDK sdk, Account account) + { + _sdk = sdk; + _account = account; + _logger = logger; + } + + [HttpPost("Login")] + public LoginResponse Login([FromBody] LoginRequest request) + { + if (request == null) + { + throw new ArgumentException("Invalid login request."); + } + + var result = _sdk.Login(request.Id, request.Password, "Your Cert Path", "Your Cert Password"); + _account = result.data[0]; + + return result; + } + + [HttpGet("Inventories")] + public InventoryResponse GetInventories() + { + var result = _sdk.Accounting.Inventories(_account); + + return result; + } + + [HttpGet("Unrealized")] + public UnRealizedResponse GetUnrealized() + { + var result = _sdk.Accounting.UnrealizedGainsAndLoses(_account); + + return result; + } + + [HttpGet("Realized")] + public RealizedResponse GetRealized() + { + var result = _sdk.Accounting.RealizedGainsAndLoses(_account); + + return result; + } + + [HttpGet("Settlement")] + public SettlementResponse GetSettlement() + { + var result = _sdk.Accounting.QuerySettlement(_account, "0d"); + + return result; + } +} \ No newline at end of file diff --git a/Controllers/Fubon.cs b/Controllers/Trade.cs similarity index 60% rename from Controllers/Fubon.cs rename to Controllers/Trade.cs index b8a18f2..fad17b4 100644 --- a/Controllers/Fubon.cs +++ b/Controllers/Trade.cs @@ -5,33 +5,20 @@ using Microsoft.AspNetCore.Mvc; namespace fubon_api.Controllers; [ApiController] -[Route("api/[controller]")] -public class FubonSdkController : ControllerBase +[Route("trade/[controller]")] +public class FubonSdkTradeController : ControllerBase { private readonly FubonSDK _sdk; - private static Account account; - private readonly ILogger _logger; + private Account _account; + private readonly ILogger _logger; - public FubonSdkController(ILogger logger, FubonSDK sdk) + public FubonSdkTradeController(ILogger logger, FubonSDK sdk, Account account) { _sdk = sdk; + _account = account; _logger = logger; } - [HttpPost("Login")] - public LoginResponse Login([FromBody] LoginRequest request) - { - if (request == null) - { - throw new ArgumentException("Invalid login request."); - } - - 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) { @@ -47,7 +34,7 @@ public class FubonSdkController : ControllerBase null ); - _sdk.Stock.PlaceOrder(account, order); + _sdk.Stock.PlaceOrder(_account, order); Console.WriteLine(request.ToString()); return true; @@ -56,7 +43,7 @@ public class FubonSdkController : ControllerBase [HttpGet("OrderResult")] public IEnumerable GetOrderResult() { - var orderResults = _sdk.Stock.GetOrderResults(account); + var orderResults = _sdk.Stock.GetOrderResults(_account); return orderResults.data; } diff --git a/Program.cs b/Program.cs index 62f751c..5d949ee 100644 --- a/Program.cs +++ b/Program.cs @@ -11,6 +11,7 @@ builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); var app = builder.Build();