haste_repository/types/
user.rs1use haste_fhir_model::r4::generated::terminology::UserRole as FHIRUserRole;
2use haste_jwt::TenantId;
3use serde::{Deserialize, Serialize};
4
5#[derive(sqlx::FromRow, Debug, Deserialize, Serialize)]
6pub struct User {
7 pub id: String,
8 pub tenant: TenantId,
9 pub email: Option<String>,
10 pub role: UserRole,
11 pub method: AuthMethod,
12 pub provider_id: Option<String>,
13}
14
15pub struct UpdateUser {
16 pub id: String,
17 pub email: Option<String>,
18 pub role: Option<UserRole>,
19 pub method: Option<AuthMethod>,
20 pub provider_id: Option<String>,
21 pub password: Option<String>,
22}
23
24pub enum LoginMethod {
25 OIDC { email: String, provider_id: String },
26 EmailPassword { email: String, password: String },
27}
28
29pub enum LoginResult {
30 Success { user: User },
31 Failure,
32}
33
34pub struct UserSearchClauses {
35 pub email: Option<String>,
36 pub role: Option<UserRole>,
37 pub method: Option<AuthMethod>,
38}
39
40pub struct CreateUser {
41 pub id: String,
42 pub email: Option<String>,
43 pub role: UserRole,
44 pub method: AuthMethod,
45 pub provider_id: Option<String>,
46 pub password: Option<String>,
47}
48
49#[derive(Clone, Debug, PartialEq, PartialOrd, sqlx::Type, serde::Deserialize, serde::Serialize)]
50#[sqlx(type_name = "auth_method", rename_all = "lowercase")] pub enum AuthMethod {
52 #[sqlx(rename = "email-password")]
53 EmailPassword,
54 #[sqlx(rename = "oidc-provider")]
55 OIDC,
56}
57
58#[derive(Clone, Debug, PartialEq, PartialOrd, sqlx::Type, serde::Deserialize, serde::Serialize)]
59#[sqlx(type_name = "user_role", rename_all = "lowercase")] #[serde(rename_all = "lowercase")]
61pub enum UserRole {
62 Owner,
63 Admin,
64 Member,
65}
66
67impl From<FHIRUserRole> for UserRole {
68 fn from(role: FHIRUserRole) -> Self {
69 match role {
70 FHIRUserRole::Owner(_) => UserRole::Owner,
71 FHIRUserRole::Admin(_) => UserRole::Admin,
72 FHIRUserRole::Member(_) => UserRole::Member,
73 FHIRUserRole::Null(_) => UserRole::Member,
74 }
75 }
76}