sumup_rs/models/
member.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct User {
6    pub id: String,
7    pub email: String,
8    #[serde(default, skip_serializing_if = "Option::is_none")]
9    pub first_name: Option<String>,
10    #[serde(default, skip_serializing_if = "Option::is_none")]
11    pub last_name: Option<String>,
12    pub created_at: DateTime<Utc>,
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub updated_at: Option<DateTime<Utc>>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct Member {
19    pub id: String,
20    pub membership_id: String,
21    pub user: User,
22    pub status: String,           // ACTIVE, INACTIVE, PENDING
23    pub roles: Vec<String>,       // Role IDs or names
24    pub permissions: Vec<String>, // Permission strings
25    pub created_at: DateTime<Utc>,
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub updated_at: Option<DateTime<Utc>>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct CreateMemberRequest {
32    pub email: String,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub first_name: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub last_name: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub roles: Option<Vec<String>>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct UpdateMemberRequest {
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub first_name: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub last_name: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub roles: Option<Vec<String>>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct MemberListResponse {
53    pub members: Vec<Member>,
54}