Skip to main content

haste_repository/
admin.rs

1/// Authentication traits include management for user and Authorization codes.
2use crate::types::user::{LoginMethod, LoginResult};
3use haste_fhir_operation_error::OperationOutcomeError;
4use haste_jwt::{ProjectId, TenantId};
5
6pub trait Login {
7    fn login(
8        &self,
9        tenant: &TenantId,
10        method: &LoginMethod,
11    ) -> impl Future<Output = Result<LoginResult, OperationOutcomeError>> + Send;
12}
13
14pub trait Migrate {
15    fn migrate(&self) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
16}
17
18pub trait SystemAdmin<S, SearchClauses> {
19    fn search(
20        &self,
21        clauses: &SearchClauses,
22    ) -> impl Future<Output = Result<Vec<S>, OperationOutcomeError>> + Send;
23}
24
25pub trait TenantAuthAdmin<CreatedModel, ReadModel, SearchClauses, UpdateModel, Key> {
26    fn create(
27        &self,
28        tenant: &TenantId,
29        model: CreatedModel,
30    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
31    fn read(
32        &self,
33        tenant: &TenantId,
34        id: &Key,
35    ) -> impl Future<Output = Result<Option<ReadModel>, OperationOutcomeError>> + Send;
36    fn update(
37        &self,
38        tenant: &TenantId,
39        model: UpdateModel,
40    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
41    fn delete(
42        &self,
43        tenant: &TenantId,
44        id: &Key,
45    ) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
46    fn search(
47        &self,
48        tenant: &TenantId,
49        clauses: &SearchClauses,
50    ) -> impl Future<Output = Result<Vec<ReadModel>, OperationOutcomeError>> + Send;
51}
52
53pub trait ProjectAuthAdmin<CreatedModel, ReadModel, SearchClauses, UpdateModel, Key> {
54    fn create(
55        &self,
56        tenant: &TenantId,
57        project: &ProjectId,
58        model: CreatedModel,
59    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
60    fn read(
61        &self,
62        tenant: &TenantId,
63        project: &ProjectId,
64        id: &Key,
65    ) -> impl Future<Output = Result<Option<ReadModel>, OperationOutcomeError>> + Send;
66    fn update(
67        &self,
68        tenant: &TenantId,
69        project: &ProjectId,
70        model: UpdateModel,
71    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
72    fn delete(
73        &self,
74        tenant: &TenantId,
75        project: &ProjectId,
76        id: &Key,
77    ) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
78    fn search(
79        &self,
80        tenant: &TenantId,
81        project: &ProjectId,
82        clauses: &SearchClauses,
83    ) -> impl Future<Output = Result<Vec<ReadModel>, OperationOutcomeError>> + Send;
84}