using System.Text.Json.Serialization; namespace FinlyticCore.Dtos; /// /// Generic request payload carrying only a limit parameter (e.g. news_GetPending). /// public record LimitRequest( [property: JsonPropertyName("limit")] int Limit ); /// /// Generic request payload for paginated queries with optional ISIN filter. /// public record PaginatedRequest( [property: JsonPropertyName("limit")] int Limit, [property: JsonPropertyName("offset")] int Offset, [property: JsonPropertyName("isin")] string? Isin = null ); /// /// Request payload for daily-news queries with optional filters. /// public record DailyNewsRequest( [property: JsonPropertyName("limit")] int Limit, [property: JsonPropertyName("offset")] int Offset, [property: JsonPropertyName("isin")] string? Isin = null, [property: JsonPropertyName("date")] string? Date = null, [property: JsonPropertyName("status")] string? Status = null, [property: JsonPropertyName("query")] string? Query = null, [property: JsonPropertyName("hasSentiment")] bool? HasSentiment = null ); /// /// Request payload for fetching fundamentals or technical-analysis data by ISIN. /// public record IsinRequest( [property: JsonPropertyName("isin")] string Isin, [property: JsonPropertyName("ticker")] string? Ticker = "", [property: JsonPropertyName("forceRefresh")] bool ForceRefresh = false ); /// /// Request payload for fetching trades filtered by ISIN and/or status. /// public record GetTradesRequest( [property: JsonPropertyName("isin")] string? Isin = null, [property: JsonPropertyName("status")] string? Status = null, [property: JsonPropertyName("userId")] string? UserId = null ); /// /// Request payload for fetching sentiment by article ID. /// public record ArticleRequest( [property: JsonPropertyName("articleId")] string ArticleId, [property: JsonPropertyName("id")] string? Id = null ); /// /// Request payload for triggering a manual sentiment analysis for an article or ISIN. /// public record AnalyzeSentimentRequest( [property: JsonPropertyName("articleId")] string? ArticleId = null, [property: JsonPropertyName("isin")] string? Isin = null, [property: JsonPropertyName("forceReload")] bool ForceReload = false ); /// /// Empty request payload for MQTT RPCs that require no parameters (e.g. events_GetAll). /// public record EmptyRequest; /// /// Request payload for triggering a manual AI analysis. /// public record ManualAnalysisRpcRequest( [property: JsonPropertyName("isin")] string Isin, [property: JsonPropertyName("symbol")] string Symbol, [property: JsonPropertyName("sector")] string Sector, [property: JsonPropertyName("headline")] string Headline, [property: JsonPropertyName("currentPrice")] decimal CurrentPrice, [property: JsonPropertyName("riskScore")] int RiskScore, [property: JsonPropertyName("minTimeframeValue")] int MinTimeframeValue, [property: JsonPropertyName("maxTimeframeValue")] int MaxTimeframeValue, [property: JsonPropertyName("timeframeUnit")] string TimeframeUnit, [property: JsonPropertyName("instrumentType")] string InstrumentType, [property: JsonPropertyName("userNotes")] string UserNotes, [property: JsonPropertyName("taData")] FinlyticCore.Dtos.TechnicalAnalysis.TechnicalAnalysisDto? TaData, [property: JsonPropertyName("fundamentalsData")] FinlyticCore.Dtos.Fundamentals.AssetFundamentalsDto? FundamentalsData, [property: JsonPropertyName("sentimentData")] FinlyticCore.Dtos.Sentiment.IsinSentimentSummaryDto? SentimentData ); /// /// Response payload returned by microservice health pings over MQTT. /// public record ServiceHealthResponse( [property: JsonPropertyName("serviceName")] string ServiceName, [property: JsonPropertyName("status")] string Status, [property: JsonPropertyName("timestamp")] DateTime Timestamp, [property: JsonPropertyName("dbStatus")] string DbStatus ); /// /// Response payload for assets_FetchLogo RPC request. /// public record FetchLogoResponse( [property: JsonPropertyName("isin")] string? Isin, [property: JsonPropertyName("path")] string? Path, [property: JsonPropertyName("success")] bool Success ); /// /// Payload published to MQTT when the Admin Panel updates a microservice's configuration. /// Replaces the anonymous type to be compatible with AOT/source-gen JSON serialization. /// public record ServiceConfigUpdatePayload( [property: JsonPropertyName("serviceName")] string ServiceName, [property: JsonPropertyName("timestamp")] DateTime Timestamp, [property: JsonPropertyName("settings")] Dictionary Settings ); /// /// Payload published to MQTT when a live market tick is received. /// public record TickMessageDto( [property: JsonPropertyName("price")] decimal Price );