public async Task <long?> AddTradeAsync(TradePost trade) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); var fileExist = File.Exists(_configuration.Path); var addHeader = !fileExist || (File.ReadLines(_configuration.Path).FirstOrDefault()?.Length ?? 0) == 0; await using var stream = File.Open(_configuration.Path, FileMode.Append); await using var writer = new StreamWriter(stream); await using var csv = new CsvWriter(writer, config); if (addHeader) { csv.WriteHeader <CsvTrade>(); await csv.NextRecordAsync(); } csv.WriteRecord(new CsvTrade() { TransactionType = trade.TransactionType ?? "", Price = trade.Price, MarketCode = trade.Market ?? "", TradeDate = trade.TransactionDate.DateTime, Quantity = trade.Quantity, Comments = trade.Comments, BrokerageCurrencyCode = trade.BrokerageCurrencyCode, InstrumentCode = trade.Symbol ?? "", PortfolioId = trade.PortfolioId?.ToString() ?? "" }); await csv.NextRecordAsync(); return(trade.GetHashCode()); }
public async Task <long?> AddTradeAsync(TradePost trade) { await LoginAsync(); var httpClient = _clientFactory.CreateClient(); httpClient.BaseAddress = _uri; httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token !.AccessToken); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, IgnoreNullValues = true }; var tradeObj = new { Trade = trade }; var content = new StringContent(JsonSerializer.Serialize(tradeObj, options), Encoding.UTF8, "application/json"); var result = await httpClient.PostAsync("api/v2/trades.json", content); if (result.IsSuccessStatusCode) { _logger.LogInformation("Trade added to sharesight! {0} {1} {2} {3}", trade.Symbol, trade.Quantity, trade.Price, trade.TransactionDate.Date); var resultJson = await result.Content.ReadAsStringAsync(); var des = JsonSerializer.Deserialize <TradeContainer>(resultJson, options); return(des?.Trade?.Id); } _logger.LogError("Adding new trade to sharesight failed {0} {1}", result.ReasonPhrase, JsonSerializer.Serialize(tradeObj, options)); throw new ArgumentException(); }
public async Task <Guid> AddTradePost(TradePost tradePost, Guid locationTrackingId) { State.TradePosts[tradePost.TrackingId] = tradePost; State.CurrentTradePostLocations[tradePost.TrackingId] = locationTrackingId; await this.WriteStateAsync(); return(tradePost.TrackingId); }
public Task <Guid> AddTradePost(Guid locationTrackingId, string tradePostName, params Guid[] tradeSetTrackingIds) { var tradePost = new TradePost(tradePostName, tradeSetTrackingIds); return(AddTradePost(tradePost, locationTrackingId)); }