1use serde::{Deserialize, Serialize};
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct QRCodeGenerateRequest {
26 pub qr_type: String,
28 pub target_id: String,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub expire_seconds: Option<u64>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub max_usage: Option<u32>,
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub metadata: Option<serde_json::Value>,
39 #[serde(skip_deserializing, default)]
41 pub user_id: u64,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct QRCodeResolveRequest {
49 pub qr_key: String,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub token: Option<String>,
52 #[serde(skip_deserializing, default)]
54 pub scanner_id: u64,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct QRCodeRefreshRequest {
62 pub qr_type: String,
63 pub target_id: String,
64 pub creator_id: String,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct QRCodeRevokeRequest {
72 pub qr_key: String,
73 #[serde(skip_deserializing, default)]
75 pub user_id: u64,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct QRCodeListRequest {
83 pub creator_id: String,
84 #[serde(default)]
85 pub include_revoked: bool,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct UserQRCodeGenerateRequest {
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub expire_seconds: Option<u64>,
96 #[serde(skip_deserializing, default)]
98 pub user_id: u64,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct UserQRCodeRefreshRequest {
106 pub user_id: String,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct UserQRCodeGetRequest {
114 pub user_id: String,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct QRCodeEntry {
120 pub qr_key: String,
121 pub qr_code: String,
122 pub qr_type: String,
123 pub target_id: String,
124 pub created_at: String,
125 pub expire_at: Option<String>,
126 pub used_count: u32,
127 pub max_usage: Option<u32>,
128 #[serde(default)]
129 pub revoked: bool,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct QRCodeGenerateResponse {
137 pub qr_key: String,
138 pub qr_code: String,
139 pub qr_type: String,
140 pub target_id: u64,
141 pub created_at: String,
142 pub expire_at: Option<String>,
143 pub max_usage: Option<u32>,
144 pub used_count: u32,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct QRCodeResolveResponse {
152 pub qr_type: String,
153 pub target_id: u64,
154 pub action: String,
155 pub data: Option<serde_json::Value>,
156 pub used_count: u32,
157 pub max_usage: Option<u32>,
158 pub expire_at: Option<String>,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize)]
165pub struct QRCodeRefreshResponse {
166 pub old_qr_key: String,
167 pub new_qr_key: String,
168 pub new_qr_code: String,
169 pub revoked_at: String,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
176pub struct QRCodeRevokeResponse {
177 pub success: bool,
178 pub qr_key: String,
179 pub revoked_at: String,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
186pub struct QRCodeListResponse {
187 pub qr_keys: Vec<QRCodeEntry>,
188 pub total: usize,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct UserQRCodeGenerateResponse {
196 pub qr_key: String,
197 pub qr_code: String,
198 pub created_at: String,
199}
200
201pub type UserQRCodeRefreshResponse = QRCodeRefreshResponse;
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
210pub struct UserQRCodeGetResponse {
211 pub qr_key: String,
212 pub qr_code: String,
213 pub created_at: String,
214 pub used_count: u32,
215}