rain_sdk/models/
disputes.rs

1//! Models for dispute endpoints
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7/// Status of a dispute
8#[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/// Dispute information
19#[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/// Query parameters for listing disputes
33#[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/// Request to update a dispute
49#[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/// Request to create a dispute
59#[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/// Request to upload dispute evidence
67#[derive(Debug, Clone)]
68pub struct UploadDisputeEvidenceRequest {
69    pub name: String,
70    pub evidence_type: String,
71    pub file: Vec<u8>,
72}
73
74/// Response type for list of disputes
75pub type ListDisputesResponse = Vec<Dispute>;