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 TenantAuthAdmin<CreatedModel, ReadModel, SearchClauses, UpdateModel, Key> {
19    fn create(
20        &self,
21        tenant: &TenantId,
22        model: CreatedModel,
23    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
24    fn read(
25        &self,
26        tenant: &TenantId,
27        id: &Key,
28    ) -> impl Future<Output = Result<Option<ReadModel>, OperationOutcomeError>> + Send;
29    fn update(
30        &self,
31        tenant: &TenantId,
32        model: UpdateModel,
33    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
34    fn delete(
35        &self,
36        tenant: &TenantId,
37        id: &Key,
38    ) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
39    fn search(
40        &self,
41        tenant: &TenantId,
42        clauses: &SearchClauses,
43    ) -> impl Future<Output = Result<Vec<ReadModel>, OperationOutcomeError>> + Send;
44}
45
46pub trait ProjectAuthAdmin<CreatedModel, ReadModel, SearchClauses, UpdateModel, Key> {
47    fn create(
48        &self,
49        tenant: &TenantId,
50        project: &ProjectId,
51        model: CreatedModel,
52    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
53    fn read(
54        &self,
55        tenant: &TenantId,
56        project: &ProjectId,
57        id: &Key,
58    ) -> impl Future<Output = Result<Option<ReadModel>, OperationOutcomeError>> + Send;
59    fn update(
60        &self,
61        tenant: &TenantId,
62        project: &ProjectId,
63        model: UpdateModel,
64    ) -> impl Future<Output = Result<ReadModel, OperationOutcomeError>> + Send;
65    fn delete(
66        &self,
67        tenant: &TenantId,
68        project: &ProjectId,
69        id: &Key,
70    ) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
71    fn search(
72        &self,
73        tenant: &TenantId,
74        project: &ProjectId,
75        clauses: &SearchClauses,
76    ) -> impl Future<Output = Result<Vec<ReadModel>, OperationOutcomeError>> + Send;
77}