haste_fhir_search/pg_search/
search_parameter_resolver.rs1use haste_fhir_client::request::SearchRequest;
2use haste_fhir_operation_error::OperationOutcomeError;
3use haste_jwt::{ProjectId, TenantId};
4use sqlx::{Pool, Postgres};
5
6use super::{R4_SCHEMA_REGISTRY, search};
7use crate::{
8 SearchOptions, SearchReturn,
9 memory::R4_SEARCH_PARAMETERS_INDEX,
10 project_parameters::{IndexSearch, ProjectParameterResolver},
11};
12
13pub type PgSearchParameterResolver<Repo> = ProjectParameterResolver<PgIndexSearch, Repo>;
16
17#[derive(Clone)]
19pub struct PgIndexSearch {
20 pool: Pool<Postgres>,
21}
22
23impl PgIndexSearch {
24 #[must_use]
25 pub fn new(pool: Pool<Postgres>) -> Self {
26 PgIndexSearch { pool }
27 }
28}
29
30impl IndexSearch for PgIndexSearch {
31 async fn search(
32 &self,
33 tenant: &TenantId,
34 project: &ProjectId,
35 request: &SearchRequest,
36 options: &SearchOptions,
37 ) -> Result<SearchReturn, OperationOutcomeError> {
38 search::execute_search(
39 &self.pool,
40 R4_SEARCH_PARAMETERS_INDEX.clone(),
41 &R4_SCHEMA_REGISTRY,
42 tenant,
43 project,
44 request,
45 Some(options),
46 )
47 .await
48 }
49}