feat(assets): update scanner background service, derivative entities, and dynamic settings
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
|
||||
|
||||
using FinlyticAssets.Entities;
|
||||
using FinlyticCore.Dtos.Assets;
|
||||
|
||||
namespace FinlyticCore.Util;
|
||||
namespace FinlyticAssets.Util;
|
||||
|
||||
public static class AssetMapper
|
||||
{
|
||||
|
||||
public static AssetDto ToDto(this AssetEntity entity)
|
||||
{
|
||||
var dtoTags = entity.Tags.Select(t => new TagDto
|
||||
@@ -83,7 +81,21 @@ public static class AssetMapper
|
||||
LastUpdatedAt = deriv.LastUpdatedAt,
|
||||
Tags = dtoTags,
|
||||
DerivativeProductCategories = deriv.DerivativeProductCategories,
|
||||
UnderlyingIsin = deriv.UnderlyingIsin
|
||||
UnderlyingIsin = deriv.UnderlyingIsin,
|
||||
OptionType = deriv.OptionType.ToString(),
|
||||
ProductCategoryName = deriv.ProductCategoryName,
|
||||
NextGenProductCategoryName = deriv.NextGenProductCategoryName,
|
||||
Strike = deriv.Strike,
|
||||
Barrier = deriv.Barrier,
|
||||
Leverage = deriv.Leverage,
|
||||
Size = deriv.Size,
|
||||
Factor = deriv.Factor,
|
||||
Delta = deriv.Delta,
|
||||
Currency = deriv.Currency,
|
||||
Expiry = deriv.Expiry,
|
||||
Issuer = deriv.Issuer,
|
||||
IssuerDisplayName = deriv.IssuerDisplayName,
|
||||
IssuerImageId = deriv.IssuerImageId
|
||||
},
|
||||
SyntheticEntity synth => new SyntheticDto
|
||||
{
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
using System.Text.Json;
|
||||
using FinlyticAssets.Entities;
|
||||
using FinlyticAssets.Services;
|
||||
using FinlyticCore.Entities.Assets;
|
||||
using FinlyticCore.Models;
|
||||
using FinlyticCore.Models.Assets;
|
||||
using FinlyticCore.Util;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace FinlyticAssets.Util;
|
||||
|
||||
@@ -61,6 +56,7 @@ public class AssetsMqttClient(
|
||||
await SubscribeAsync("services/request/assets_Get/#");
|
||||
await SubscribeAsync("services/request/assets_Search/#");
|
||||
await SubscribeAsync("services/request/assets_GetDiscovery/#");
|
||||
await SubscribeAsync("services/request/assets_GetDerivatives/#");
|
||||
await SubscribeAsync("services/request/assets_FetchLogo/#");
|
||||
await SubscribeAsync("services/request/health_Ping/#");
|
||||
await SubscribeAsync("services/config/updated/#");
|
||||
@@ -119,6 +115,9 @@ public class AssetsMqttClient(
|
||||
case "assets_GetDiscovery":
|
||||
responseData = await HandleAssetsGetDiscoveryAsync(payload, dbService);
|
||||
break;
|
||||
case "assets_GetDerivatives":
|
||||
responseData = (await HandleAssetsGetDerivativesAsync(payload, dbService)).Cast<AssetEntity>().ToList();
|
||||
break;
|
||||
}
|
||||
|
||||
string defaultResponseTopic = $"services/response/{channel}/{correlationId}";
|
||||
@@ -216,4 +215,24 @@ public class AssetsMqttClient(
|
||||
}
|
||||
return await dbService.GetDiscoveryAssetsAsync(limit);
|
||||
}
|
||||
|
||||
private async Task<List<DerivativeEntity>> HandleAssetsGetDerivativesAsync(string payload, IAssetsDbService dbService)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(payload)) return [];
|
||||
|
||||
try
|
||||
{
|
||||
var req = JsonSerializer.Deserialize(payload, FinlyticJsonSerializerContext.Default.GetDerivativesRequest);
|
||||
if (req != null && !string.IsNullOrEmpty(req.UnderlyingIsin))
|
||||
{
|
||||
return await dbService.GetDerivativesByUnderlyingAsync(req.UnderlyingIsin, req.OptionType, req.ShouldForceRefresh);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "[{Channel}] Error parsing GetDerivativesRequest payload.", "AssetsChannel");
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user