rain_sdk/models/
disputes.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "camelCase")]
10pub enum DisputeStatus {
11 Pending,
12 InReview,
13 Accepted,
14 Rejected,
15 Canceled,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct Dispute {
22 pub id: Uuid,
23 pub transaction_id: Uuid,
24 pub status: DisputeStatus,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub text_evidence: Option<String>,
27 pub created_at: DateTime<Utc>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub resolved_at: Option<DateTime<Utc>>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct ListDisputesParams {
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub company_id: Option<Uuid>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub user_id: Option<Uuid>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub transaction_id: Option<Uuid>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub cursor: Option<String>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub limit: Option<u32>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub struct UpdateDisputeRequest {
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub status: Option<DisputeStatus>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub text_evidence: Option<String>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct CreateDisputeRequest {
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub text_evidence: Option<String>,
64}
65
66#[derive(Debug, Clone)]
68pub struct UploadDisputeEvidenceRequest {
69 pub name: String,
70 pub evidence_type: String,
71 pub file: Vec<u8>,
72}
73
74pub type ListDisputesResponse = Vec<Dispute>;