shuttle_common/models/
team.rs

1use 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    /// Display name
16    pub name: String,
17    /// Membership info of the calling user
18    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    /// Role of the user in the team
33    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    /// Role of the user in the team
42    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/// Provide user id to add user.
57/// Provide email address to invite user via email.
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
59#[typeshare::typeshare]
60pub struct AddTeamMemberRequest {
61    pub user_id: Option<String>,
62    pub email: Option<String>,
63    /// Role of the user in the team
64    pub role: Option<TeamRole>,
65}