Skip to content

Commit c3370d8

Browse files
authored
fix: removing wrong route from knowledge api (#237)
1 parent 6b32df3 commit c3370d8

File tree

4 files changed

+41
-12
lines changed

4 files changed

+41
-12
lines changed

api/src/helper/shape_mongo_filter.rs

+21-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use axum::extract::Query;
22
use entities::{
3-
event_access::EventAccess, DELETED_FILTER, DUAL_ENVIRONMENT_HEADER, ENVIRONMENT_FILTER,
4-
LIMIT_FILTER, OWNERSHIP_FILTER, SKIP_FILTER,
3+
event_access::EventAccess, CONTAINS_FILTER, DELETED_FILTER, DUAL_ENVIRONMENT_HEADER,
4+
ENVIRONMENT_FILTER, LIMIT_FILTER, OWNERSHIP_FILTER, SKIP_FILTER,
55
};
66
use http::HeaderMap;
77
use mongodb::bson::{doc, Document};
@@ -19,14 +19,28 @@ pub fn shape_mongo_filter(
1919
event_access: Option<Arc<EventAccess>>,
2020
headers: Option<HeaderMap>,
2121
) -> MongoQuery {
22-
let mut filter = doc! {};
22+
let mut filter = doc! {
23+
// "tags" : {
24+
// "$in" : ["featured"]
25+
// }
26+
};
2327
let mut skip = 0;
2428
let mut limit = 20;
2529

2630
if let Some(q) = query {
2731
for (key, value) in q.0.iter() {
2832
if key == LIMIT_FILTER {
2933
limit = value.parse().unwrap_or(20);
34+
} else if key == CONTAINS_FILTER {
35+
let values = string_to_vec(value);
36+
let splitted = values.split_first();
37+
38+
let target = splitted.map(|a| a.0);
39+
let rest = splitted.map(|a| a.1);
40+
41+
if let (Some(target), Some(rest)) = (target, rest) {
42+
filter.insert(target, doc! { CONTAINS_FILTER: rest.to_vec() });
43+
}
3044
} else if key == SKIP_FILTER {
3145
skip = value.parse().unwrap_or(0);
3246
} else {
@@ -67,6 +81,10 @@ pub fn shape_mongo_filter(
6781
}
6882
}
6983

84+
fn string_to_vec(s: &str) -> Vec<String> {
85+
s.split(',').map(|s| s.to_string()).collect::<Vec<String>>()
86+
}
87+
7088
#[cfg(test)]
7189
mod test {
7290
use super::shape_mongo_filter;

api/src/logic/knowledge.rs

+18-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
1-
use super::{read_without_key, HookExt, PublicExt, RequestExt};
2-
use crate::server::{AppState, AppStores};
3-
use axum::{routing::get, Router};
4-
use entities::{Id, MongoStore};
1+
use super::{read_without_key, HookExt, PublicExt, ReadResponse, RequestExt};
2+
use crate::{
3+
router::ServerResponse,
4+
server::{AppState, AppStores},
5+
};
6+
use axum::{
7+
extract::{Query, State},
8+
routing::get,
9+
Json, Router,
10+
};
11+
use bson::doc;
12+
use entities::{record_metadata::RecordMetadata, Id, MongoStore, PicaError};
513
use fake::Dummy;
14+
use http::HeaderMap;
615
use serde::{Deserialize, Serialize};
7-
use std::sync::Arc;
16+
use serde_json::Value;
17+
use std::{collections::BTreeMap, sync::Arc};
818

919
pub fn get_router() -> Router<Arc<AppState>> {
10-
Router::new()
11-
.route("/", get(read_without_key::<ReadRequest, Knowledge>))
12-
.route("/:id", get(read_without_key::<ReadRequest, Knowledge>))
20+
Router::new().route("/", get(read_without_key::<ReadRequest, Knowledge>))
1321
}
1422

1523
struct ReadRequest;
@@ -23,6 +31,8 @@ pub struct Knowledge {
2331
pub title: String,
2432
pub path: String,
2533
pub knowledge: Option<String>,
34+
#[serde(flatten)]
35+
pub metadata: RecordMetadata,
2636
}
2737

2838
impl HookExt<Knowledge> for ReadRequest {}

api/src/logic/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ async fn get_connection(
382382
Ok(Arc::new(connection))
383383
}
384384

385-
pub async fn read_common<T, U>(
385+
async fn read_common<T, U>(
386386
headers: HeaderMap,
387387
access: Option<Extension<Arc<EventAccess>>>,
388388
query: Option<Query<BTreeMap<String, String>>>,

entities/src/domain/constant/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub const OWNERSHIP_FILTER: &str = "ownership.buildableId";
1313
pub const ENVIRONMENT_FILTER: &str = "environment";
1414
pub const DUAL_ENVIRONMENT_HEADER: &str = "x-pica-show-all-environments";
1515
pub const LIMIT_FILTER: &str = "limit";
16+
pub const CONTAINS_FILTER: &str = "$in";
1617
pub const SKIP_FILTER: &str = "skip";
1718
pub const QUERY_BY_ID_PASSTHROUGH: &str = "x-pica-action-id";
1819

0 commit comments

Comments
 (0)