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#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
7#[typeshare::typeshare]
8pub struct TeamListResponse {
9 pub teams: Vec<TeamResponse>,
10}
11
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
14#[typeshare::typeshare]
15pub struct TeamResponse {
16 pub id: String,
17 pub name: String,
19 pub membership: TeamMembership,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
24#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
25#[typeshare::typeshare]
26pub struct TeamMembersResponse {
27 pub members: Vec<TeamMembership>,
28 pub invites: Vec<TeamInvite>,
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
32#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
33#[typeshare::typeshare]
34pub struct TeamMembership {
35 pub user_id: String,
36 pub role: TeamRole,
38 pub nickname: Option<String>,
40 pub picture: Option<String>,
42 pub email: Option<String>,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
47#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
48#[typeshare::typeshare]
49pub struct TeamInvite {
50 pub id: String,
51 pub email: String,
52 pub role: TeamRole,
54 pub expires_at: DateTime<Utc>,
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Display, EnumString)]
58#[serde(rename_all = "lowercase")]
59#[strum(serialize_all = "lowercase")]
60#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
61#[typeshare::typeshare]
62pub enum TeamRole {
63 Owner,
64 Admin,
65 Member,
66
67 #[cfg(feature = "unknown-variants")]
69 #[doc(hidden)]
70 #[typeshare(skip)]
71 #[serde(untagged, skip_serializing)]
72 #[strum(default, to_string = "Unknown: {0}")]
73 Unknown(String),
74}
75
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
79#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
80#[typeshare::typeshare]
81pub struct AddTeamMemberRequest {
82 pub user_id: Option<String>,
83 pub email: Option<String>,
84 pub role: Option<TeamRole>,
86}