Skip to main content

haste_repository/
fhir.rs

1/// FHIR Access
2use crate::types::SupportedFHIRVersions;
3use haste_fhir_client::request::HistoryRequest;
4use haste_fhir_model::r4::generated::resources::{Resource, ResourceType};
5use haste_fhir_operation_error::OperationOutcomeError;
6use haste_jwt::{ProjectId, ResourceId, TenantId, VersionId, claims::UserTokenClaims};
7
8#[derive(Clone)]
9pub struct ResourceHistoryValue {
10    pub resource: Resource,
11    pub request_method: String,
12}
13
14#[derive(PartialEq, Eq)]
15pub enum CachePolicy {
16    NoCache,
17    Cache,
18}
19
20pub trait FHIRRepository: Sized {
21    fn create(
22        &self,
23        tenant: &TenantId,
24        project: &ProjectId,
25        user: &UserTokenClaims,
26        fhir_version: &SupportedFHIRVersions,
27        resource: &mut Resource,
28    ) -> impl Future<Output = Result<Resource, OperationOutcomeError>> + Send;
29
30    fn update(
31        &self,
32        tenant: &TenantId,
33        project: &ProjectId,
34        user: &UserTokenClaims,
35        fhir_version: &SupportedFHIRVersions,
36        resource: &mut Resource,
37        id: &str,
38    ) -> impl Future<Output = Result<Resource, OperationOutcomeError>> + Send;
39
40    fn delete(
41        &self,
42        tenant: &TenantId,
43        project: &ProjectId,
44        user: &UserTokenClaims,
45        fhir_version: &SupportedFHIRVersions,
46        resource: &mut Resource,
47        id: &str,
48    ) -> impl Future<Output = Result<Resource, OperationOutcomeError>> + Send;
49
50    fn read_by_version_ids(
51        &self,
52        tenant_id: &TenantId,
53        project_id: &ProjectId,
54        version_id: &[&VersionId],
55        cache_policy: CachePolicy,
56    ) -> impl Future<Output = Result<Vec<Resource>, OperationOutcomeError>> + Send;
57    fn read_latest(
58        &self,
59        tenant_id: &TenantId,
60        project_id: &ProjectId,
61        resource_type: &ResourceType,
62        resource_id: &ResourceId,
63    ) -> impl Future<Output = Result<Option<Resource>, OperationOutcomeError>> + Send;
64    fn history(
65        &self,
66        tenant_id: &TenantId,
67        project_id: &ProjectId,
68        request: &HistoryRequest,
69    ) -> impl Future<Output = Result<Vec<ResourceHistoryValue>, OperationOutcomeError>> + Send;
70    fn transaction<'a>(
71        &'a self,
72        register: bool,
73    ) -> impl Future<Output = Result<Self, OperationOutcomeError>> + Send;
74    fn in_transaction(&self) -> bool;
75    fn commit(self) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
76    fn rollback(self) -> impl Future<Output = Result<(), OperationOutcomeError>> + Send;
77}