diff --git a/server/graphql/general/src/lib.rs b/server/graphql/general/src/lib.rs index 6912facf2b..42f984c692 100644 --- a/server/graphql/general/src/lib.rs +++ b/server/graphql/general/src/lib.rs @@ -6,13 +6,14 @@ pub mod types; pub use self::queries::sync_status::*; use self::queries::*; +use abbreviation::abbreviations; use diagnosis::diagnoses_active; use graphql_core::pagination::PaginationInput; use service::sync::CentralServerConfig; use crate::store_preference::store_preferences; use graphql_types::types::{ - CurrenciesResponse, CurrencyFilterInput, CurrencySortInput, DiagnosisNode, + AbbreviationNode, CurrenciesResponse, CurrencyFilterInput, CurrencySortInput, DiagnosisNode, MasterListFilterInput, StorePreferenceNode, }; use mutations::{ @@ -35,6 +36,7 @@ use mutations::{ update_user, }; use queries::{ + abbreviation::AbbreviationFilterInput, currency::currencies, display_settings::{display_settings, DisplaySettingsHash, DisplaySettingsNode}, initialisation_status::{initialisation_status, InitialisationStatusNode}, @@ -426,6 +428,14 @@ impl GeneralQueries { pub async fn diagnoses_active(&self, ctx: &Context<'_>) -> Result> { diagnoses_active(ctx) } + + pub async fn abbreviations( + &self, + ctx: &Context<'_>, + filter: Option, + ) -> Result> { + abbreviations(ctx, filter) + } } #[derive(Default, Clone)] diff --git a/server/graphql/general/src/queries/abbreviation.rs b/server/graphql/general/src/queries/abbreviation.rs new file mode 100644 index 0000000000..caed97ac19 --- /dev/null +++ b/server/graphql/general/src/queries/abbreviation.rs @@ -0,0 +1,42 @@ +use async_graphql::*; +use graphql_core::generic_filters::{EqualFilterInput, StringFilterInput}; +use graphql_core::standard_graphql_error::validate_auth; +use graphql_core::ContextExt; +use graphql_types::types::AbbreviationNode; +use repository::abbreviation::AbbreviationFilter; +use repository::{EqualFilter, StringFilter}; +use service::abbreviation::get_all_abbreviations; +use service::auth::{Resource, ResourceAccessRequest}; + +#[derive(InputObject, Clone)] +pub struct AbbreviationFilterInput { + pub id: Option>, + pub text: Option, +} + +impl AbbreviationFilterInput { + pub fn to_domain(self) -> AbbreviationFilter { + AbbreviationFilter { + id: self.id.map(EqualFilter::from), + text: self.text.map(StringFilter::from), + } + } +} + +pub fn abbreviations( + ctx: &Context<'_>, + filter: Option, +) -> Result> { + validate_auth( + ctx, + &ResourceAccessRequest { + resource: Resource::NoPermissionRequired, + store_id: None, + }, + )?; + + let connection_manager = ctx.get_connection_manager(); + let rows = get_all_abbreviations(connection_manager, filter.map(|filter| filter.to_domain()))?; + + Ok(AbbreviationNode::from_vec(rows)) +} diff --git a/server/graphql/general/src/queries/mod.rs b/server/graphql/general/src/queries/mod.rs index 6d044e7013..81661c05e5 100644 --- a/server/graphql/general/src/queries/mod.rs +++ b/server/graphql/general/src/queries/mod.rs @@ -70,6 +70,7 @@ pub use self::generate_supplier_return_lines::*; pub mod return_reason; pub use self::return_reason::*; +pub mod abbreviation; pub mod diagnosis; #[cfg(test)] diff --git a/server/graphql/types/src/types/abbreviation.rs b/server/graphql/types/src/types/abbreviation.rs new file mode 100644 index 0000000000..03f956429e --- /dev/null +++ b/server/graphql/types/src/types/abbreviation.rs @@ -0,0 +1,34 @@ +use async_graphql::*; +use repository::abbreviation::Abbreviation; + +pub struct AbbreviationNode { + pub abbreviation: Abbreviation, +} + +#[Object] +impl AbbreviationNode { + pub async fn id(&self) -> &String { + &self.abbreviation.id + } + + pub async fn text(&self) -> &String { + &self.abbreviation.text + } + + pub async fn expansion(&self) -> &String { + &self.abbreviation.expansion + } +} + +impl AbbreviationNode { + pub fn from_domain(row: Abbreviation) -> AbbreviationNode { + AbbreviationNode { abbreviation: row } + } + + pub fn from_vec(abbreviations: Vec) -> Vec { + abbreviations + .into_iter() + .map(AbbreviationNode::from_domain) + .collect() + } +} diff --git a/server/graphql/types/src/types/mod.rs b/server/graphql/types/src/types/mod.rs index e3ae0cb7cf..c2d0baf219 100644 --- a/server/graphql/types/src/types/mod.rs +++ b/server/graphql/types/src/types/mod.rs @@ -118,6 +118,8 @@ pub use self::reason_option::*; pub mod cold_storage_type; pub use self::cold_storage_type::*; +pub mod abbreviation; +pub use self::abbreviation::*; mod requisition_item_information; use async_graphql::*; diff --git a/server/service/src/abbreviation.rs b/server/service/src/abbreviation.rs new file mode 100644 index 0000000000..e46d89f5af --- /dev/null +++ b/server/service/src/abbreviation.rs @@ -0,0 +1,16 @@ +use repository::{ + abbreviation::{Abbreviation, AbbreviationFilter, AbbreviationRepository}, + RepositoryError, StorageConnectionManager, +}; + +pub fn get_all_abbreviations( + connection_manager: &StorageConnectionManager, + filter: Option, +) -> Result, RepositoryError> { + let connection = connection_manager.connection()?; + let repository = AbbreviationRepository::new(&connection); + + let rows = repository.query(filter.clone())?; + + Ok(rows) +} diff --git a/server/service/src/lib.rs b/server/service/src/lib.rs index a138f0d3ce..80056d3631 100644 --- a/server/service/src/lib.rs +++ b/server/service/src/lib.rs @@ -15,6 +15,7 @@ use std::fs::File; use std::io::BufReader; use thiserror::Error; +pub mod abbreviation; pub mod activity_log; pub mod apis; pub mod app_data;