shuttle_common/models/
team.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use strum::{Display, EnumString};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[typeshare::typeshare]
7pub struct TeamListResponse {
8 pub teams: Vec<TeamResponse>,
9}
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12#[typeshare::typeshare]
13pub struct TeamResponse {
14 pub id: String,
15 pub name: String,
17 pub membership: TeamMembership,
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22#[typeshare::typeshare]
23pub struct TeamMembersResponse {
24 pub members: Vec<TeamMembership>,
25 pub invites: Vec<TeamInvite>,
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
29#[typeshare::typeshare]
30pub struct TeamMembership {
31 pub user_id: String,
32 pub role: TeamRole,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
37#[typeshare::typeshare]
38pub struct TeamInvite {
39 pub id: String,
40 pub email: String,
41 pub role: TeamRole,
43 pub expires_at: DateTime<Utc>,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Display, EnumString)]
47#[serde(rename_all = "lowercase")]
48#[strum(serialize_all = "lowercase")]
49#[typeshare::typeshare]
50pub enum TeamRole {
51 Owner,
52 Admin,
53 Member,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
59#[typeshare::typeshare]
60pub struct AddTeamMemberRequest {
61 pub user_id: Option<String>,
62 pub email: Option<String>,
63 pub role: Option<TeamRole>,
65}