konduto/types/
responses.rs

1//! Estruturas de respostas da API
2
3use super::*;
4use serde::{Deserialize, Serialize};
5
6/// Resposta da análise de pedido
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct OrderAnalysisResponse {
9    /// ID do pedido
10    pub id: String,
11
12    /// Recomendação da análise
13    pub recommendation: Recommendation,
14
15    /// Score de risco (0-100)
16    pub score: f64,
17
18    /// Status do pedido
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub status: Option<OrderStatus>,
21
22    /// Tipo de análise realizada
23    // #[serde(skip_serializing_if = "Option::is_none")]
24    // pub analysis: Option<AnalysisType>,
25
26    /// Dispositivo reconhecido
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub device: Option<DeviceInfo>,
29
30    /// Navegação reconhecida
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub navigation: Option<NavigationInfo>,
33
34    /// Geolocalização
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub geolocation: Option<GeolocationInfo>,
37
38    /// Lista de warnings/alertas
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub warnings: Option<Vec<String>>,
41}
42
43/// Informações do dispositivo na resposta
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct DeviceInfo {
46    /// ID do dispositivo
47    pub id: String,
48
49    /// Se o dispositivo é confiável
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub is_trusted: Option<bool>,
52
53    /// Número de pedidos feitos com este dispositivo
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub orders_count: Option<i32>,
56}
57
58/// Informações de navegação na resposta
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct NavigationInfo {
61    /// Tempo de navegação em segundos
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub time: Option<i32>,
64
65    /// Número de páginas visitadas
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub page_count: Option<i32>,
68}
69
70/// Informações de geolocalização na resposta
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct GeolocationInfo {
73    /// País
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub country: Option<String>,
76
77    /// Região/Estado
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub region: Option<String>,
80
81    /// Cidade
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub city: Option<String>,
84}
85
86/// Resposta ao consultar um pedido
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct OrderQueryResponse {
89    /// ID do pedido
90    pub id: String,
91
92    /// Recomendação da análise
93    pub recommendation: Recommendation,
94
95    /// Score de risco
96    pub score: f64,
97
98    /// Status do pedido
99    pub status: OrderStatus,
100
101    // /// Tipo de análise
102    // pub analysis: AnalysisType,
103    /// Dados completos do pedido
104    #[serde(flatten)]
105    pub order_data: serde_json::Value,
106}
107
108/// Resposta ao atualizar status de pedido
109#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct UpdateStatusResponse {
111    /// ID do pedido
112    pub id: String,
113
114    /// Novo status
115    pub status: OrderStatus,
116
117    /// Mensagem de confirmação
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub message: Option<String>,
120}
121
122/// Resposta de erro da API
123#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct ApiErrorResponse {
125    /// Código do erro
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub code: Option<String>,
128
129    /// Mensagem de erro
130    pub message: String,
131
132    /// Detalhes adicionais
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub details: Option<serde_json::Value>,
135}