AddFilters for all resource queries

This commit is contained in:
mbecker20
2024-01-13 13:51:04 -08:00
parent fd487350f5
commit 4815d225d7
5 changed files with 106 additions and 13 deletions

View File

@@ -1,11 +1,14 @@
use derive_builder::Builder;
use derive_variants::EnumVariants;
use mungos::mongodb::bson::{doc, Document};
use partial_derive2::Partial;
use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString};
use strum_macros::{AsRefStr, Display, EnumString};
use typeshare::typeshare;
use super::resource::{Resource, ResourceListItem};
use super::resource::{
AddFilters, Resource, ResourceListItem, ResourceQuery,
};
#[typeshare]
pub type Alerter = Resource<AlerterConfig, AlerterInfo>;
@@ -27,6 +30,9 @@ pub struct AlerterInfo {
pub is_default: bool,
}
#[typeshare(serialized_as = "AlerterConfig['type']")]
pub type _AlerterConfigVariant = AlerterConfigVariant;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
#[variant_derive(
@@ -36,7 +42,8 @@ pub struct AlerterInfo {
Clone,
Copy,
Display,
EnumString
EnumString,
AsRefStr
)]
#[serde(tag = "type", content = "params")]
pub enum AlerterConfig {
@@ -59,7 +66,8 @@ pub type _PartialSlackAlerterConfig = PartialSlackAlerterConfig;
Clone,
Copy,
Display,
EnumString
EnumString,
AsRefStr
)]
#[serde(tag = "type", content = "params")]
pub enum PartialAlerterConfig {
@@ -129,3 +137,22 @@ pub struct SlackAlerterConfig {
))]
pub url: String,
}
#[typeshare]
pub type AlerterQuery = ResourceQuery<AlerterQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct AlerterQuerySpecifics {
pub types: Vec<_AlerterConfigVariant>,
}
impl AddFilters for AlerterQuerySpecifics {
fn add_filters(&self, filters: &mut Document) {
let types =
self.types.iter().map(|t| t.as_ref()).collect::<Vec<_>>();
if !self.types.is_empty() {
filters.insert("config.type", doc! { "$in": types });
}
}
}

View File

@@ -5,7 +5,9 @@ use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString};
use typeshare::typeshare;
use super::resource::{Resource, ResourceListItem};
use super::resource::{
AddFilters, Resource, ResourceListItem, ResourceQuery,
};
#[typeshare]
pub type Builder = Resource<BuilderConfig, ()>;
@@ -178,3 +180,12 @@ fn aws_default_instance_type() -> String {
fn aws_default_volume_gb() -> i32 {
20
}
#[typeshare]
pub type BuilderQuery = ResourceQuery<BuilderQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct BuilderQuerySpecifics {}
impl AddFilters for BuilderQuerySpecifics {}

View File

@@ -1,10 +1,14 @@
use derive_variants::EnumVariants;
use mungos::mongodb::bson::{doc, Document};
use serde::{Deserialize, Serialize};
use strum_macros::{AsRefStr, Display, EnumString};
use typeshare::typeshare;
use crate::api::execute::Execution;
use super::resource::{Resource, ResourceListItem};
use super::resource::{
AddFilters, Resource, ResourceListItem, ResourceQuery,
};
#[typeshare]
pub type Procedure = Resource<ProcedureConfig, ()>;
@@ -15,12 +19,24 @@ pub type ProcedureListItem = ResourceListItem<ProcedureListItemInfo>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ProcedureListItemInfo {
pub procedure_type: ProcedureConfigVariant,
pub procedure_type: _ProcedureConfigVariant,
}
#[typeshare(serialized_as = "ProcedureConfig['type']")]
pub type _ProcedureConfigVariant = ProcedureConfigVariant;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
#[variant_derive(Serialize, Deserialize, Debug, Clone, Copy)]
#[variant_derive(
Serialize,
Deserialize,
Debug,
Clone,
Copy,
Display,
EnumString,
AsRefStr
)]
#[serde(tag = "type", content = "data")]
pub enum ProcedureConfig {
Execution(Execution),
@@ -51,3 +67,22 @@ impl From<&ProcedureConfig> for ProcedureConfigVariant {
pub struct ProcedureActionState {
pub running: bool,
}
#[typeshare]
pub type ProcedureQuery = ResourceQuery<ProcedureQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ProcedureQuerySpecifics {
pub types: Vec<_ProcedureConfigVariant>,
}
impl AddFilters for ProcedureQuerySpecifics {
fn add_filters(&self, filters: &mut Document) {
let types =
self.types.iter().map(|t| t.as_ref()).collect::<Vec<_>>();
if !self.types.is_empty() {
filters.insert("config.type", doc! { "$in": types });
}
}
}

View File

@@ -1,4 +1,5 @@
use derive_builder::Builder;
use mungos::mongodb::bson::{doc, Document};
use partial_derive2::Partial;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
@@ -6,7 +7,7 @@ use typeshare::typeshare;
use crate::entities::I64;
use super::{
resource::{Resource, ResourceListItem},
resource::{AddFilters, Resource, ResourceListItem, ResourceQuery},
SystemCommand,
};
@@ -62,3 +63,20 @@ pub struct RepoActionState {
pub updating: bool,
pub deleting: bool,
}
#[typeshare]
pub type RepoQuery = ResourceQuery<RepoQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct RepoQuerySpecifics {
pub repos: Vec<String>,
}
impl AddFilters for RepoQuerySpecifics {
fn add_filters(&self, filters: &mut Document) {
if !self.repos.is_empty() {
filters.insert("config.repo", doc! { "$in": &self.repos });
}
}
}

View File

@@ -3,7 +3,9 @@ use partial_derive2::Partial;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use super::resource::{Resource, ResourceListItem, ResourceQuery};
use super::resource::{
AddFilters, Resource, ResourceListItem, ResourceQuery,
};
pub mod docker_image;
pub mod docker_network;
@@ -174,6 +176,6 @@ pub type ServerQuery = ResourceQuery<ServerQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ServerQuerySpecifics {
}
pub struct ServerQuerySpecifics {}
impl AddFilters for ServerQuerySpecifics {}