queries.rs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. use chrono::{DateTime, Utc};
  2. use get_routes::handler;
  3. use heed3::RoTxn;
  4. use helix_db::helix_engine::vector_core::vector::HVector;
  5. use helix_db::{
  6. exclude_field, field_remapping, identifier_remapping, traversal_remapping, value_remapping,
  7. };
  8. use helix_db::{
  9. helix_engine::graph_core::ops::{
  10. bm25::search_bm25::SearchBM25Adapter,
  11. g::G,
  12. in_::{in_::InAdapter, in_e::InEdgesAdapter, to_n::ToNAdapter, to_v::ToVAdapter},
  13. out::{
  14. from_n::FromNAdapter, from_v::FromVAdapter, out::OutAdapter, out_e::OutEdgesAdapter,
  15. },
  16. source::{
  17. add_e::{AddEAdapter, EdgeType},
  18. add_n::AddNAdapter,
  19. e_from_id::EFromIdAdapter,
  20. e_from_type::EFromTypeAdapter,
  21. n_from_id::NFromIdAdapter,
  22. n_from_index::NFromIndexAdapter,
  23. n_from_type::NFromTypeAdapter,
  24. },
  25. tr_val::{Traversable, TraversalVal},
  26. util::{
  27. dedup::DedupAdapter, drop::Drop, filter_mut::FilterMut, filter_ref::FilterRefAdapter,
  28. map::MapAdapter, paths::ShortestPathAdapter, props::PropsAdapter, range::RangeAdapter,
  29. update::UpdateAdapter,
  30. },
  31. vectors::{
  32. brute_force_search::BruteForceSearchVAdapter, insert::InsertVAdapter,
  33. search::SearchVAdapter,
  34. },
  35. },
  36. helix_engine::types::GraphError,
  37. helix_gateway::router::router::HandlerInput,
  38. node_matches, props,
  39. protocol::count::Count,
  40. protocol::remapping::{RemappingMap, ResponseRemapping},
  41. protocol::response::Response,
  42. protocol::{
  43. filterable::Filterable, id::ID, remapping::Remapping, return_values::ReturnValue,
  44. value::Value,
  45. },
  46. };
  47. use sonic_rs::{Deserialize, Serialize};
  48. use std::cell::RefCell;
  49. use std::collections::{HashMap, HashSet};
  50. use std::sync::Arc;
  51. use std::time::Instant;
  52. pub struct User {
  53. pub arr: Vec<i64>,
  54. }
  55. #[derive(Serialize, Deserialize)]
  56. pub struct getUserInput {
  57. pub user_id: ID,
  58. }
  59. #[handler]
  60. pub fn getUser(input: &HandlerInput, response: &mut Response) -> Result<(), GraphError> {
  61. let data: getUserInput = match sonic_rs::from_slice(&input.request.body) {
  62. Ok(data) => data,
  63. Err(err) => return Err(GraphError::from(err)),
  64. };
  65. let mut remapping_vals = RemappingMap::new();
  66. let db = Arc::clone(&input.graph.storage);
  67. let txn = db.graph_env.read_txn().unwrap();
  68. let user = G::new(Arc::clone(&db), &txn)
  69. .n_from_id(&data.user_id)
  70. .collect_to::<Vec<_>>();
  71. let mut return_vals: HashMap<String, ReturnValue> = HashMap::new();
  72. return_vals.insert(
  73. "user".to_string(),
  74. ReturnValue::from_traversal_value_array_with_mixin(
  75. user.clone(),
  76. remapping_vals.borrow_mut(),
  77. ),
  78. );
  79. txn.commit().unwrap();
  80. response.body = sonic_rs::to_vec(&return_vals).unwrap();
  81. Ok(())
  82. }
  83. #[derive(Serialize, Deserialize)]
  84. pub struct createUserInput {
  85. pub arr: Vec<i64>,
  86. }
  87. #[handler]
  88. pub fn createUser(input: &HandlerInput, response: &mut Response) -> Result<(), GraphError> {
  89. let data: createUserInput = match sonic_rs::from_slice(&input.request.body) {
  90. Ok(data) => data,
  91. Err(err) => return Err(GraphError::from(err)),
  92. };
  93. let mut remapping_vals = RemappingMap::new();
  94. let db = Arc::clone(&input.graph.storage);
  95. let mut txn = db.graph_env.write_txn().unwrap();
  96. let user = G::new_mut(Arc::clone(&db), &mut txn)
  97. .add_n("User", Some(props! { "arr" => data.arr.clone() }), None)
  98. .collect_to::<Vec<_>>();
  99. let mut return_vals: HashMap<String, ReturnValue> = HashMap::new();
  100. return_vals.insert(
  101. "user".to_string(),
  102. ReturnValue::from_traversal_value_array_with_mixin(
  103. user.clone(),
  104. remapping_vals.borrow_mut(),
  105. ),
  106. );
  107. txn.commit().unwrap();
  108. response.body = sonic_rs::to_vec(&return_vals).unwrap();
  109. Ok(())
  110. }