haste_repository/types/
membership.rs

1use crate::types::scope::UserId;
2use haste_jwt::{ProjectId, TenantId};
3use serde::{Deserialize, Serialize};
4
5#[derive(sqlx::FromRow, Debug, Deserialize, Serialize)]
6pub struct Membership {
7    pub resource_id: String,
8    pub tenant: TenantId,
9    pub project: ProjectId,
10    pub user_id: String,
11    pub role: MembershipRole,
12}
13
14pub struct MembershipSearchClaims {
15    pub user_id: Option<UserId>,
16    pub role: Option<MembershipRole>,
17}
18
19pub struct CreateMembership {
20    pub resource_id: String,
21    pub user_id: String,
22    pub role: MembershipRole,
23}
24
25#[derive(Clone, Debug, PartialEq, PartialOrd, sqlx::Type, serde::Deserialize, serde::Serialize)]
26#[sqlx(type_name = "membership_role", rename_all = "lowercase")] // only for PostgreSQL to match a type definition
27#[serde(rename_all = "lowercase")]
28pub enum MembershipRole {
29    Admin,
30    Member,
31}