consolidate API routes, remove lookup_by_filename
parent
f5dd4141b1
commit
c0e1f42533
|
@ -461,26 +461,6 @@ fn _process_directory_entry<P: AsRef<Path>>(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn lookup_by_filename<C: Connection<Backend = Sqlite>>(
|
|
||||||
connection: &C,
|
|
||||||
filename: String,
|
|
||||||
) -> Result<Vec<Entry>> {
|
|
||||||
let dir_value = EntryValue::Value(Value::String(filename));
|
|
||||||
let entity_addresses = query_entries(
|
|
||||||
connection,
|
|
||||||
EntryQuery {
|
|
||||||
entity: QueryComponent::Any,
|
|
||||||
attribute: QueryComponent::In(vec![DIR_KEY.to_string(), FILENAME_KEY.to_string()]), // ?
|
|
||||||
value: QueryComponent::Exact(dir_value), // ??
|
|
||||||
},
|
|
||||||
)?;
|
|
||||||
|
|
||||||
bulk_retrieve_objects(
|
|
||||||
connection,
|
|
||||||
entity_addresses.into_iter().map(|e| e.target).collect(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::filesystem::{UDirectory, UPath};
|
use crate::filesystem::{UDirectory, UPath};
|
||||||
|
|
|
@ -83,13 +83,13 @@ fn main() -> Result<()> {
|
||||||
App::new()
|
App::new()
|
||||||
.data(state.clone())
|
.data(state.clone())
|
||||||
.wrap(middleware::Logger::default())
|
.wrap(middleware::Logger::default())
|
||||||
.service(routes::get_query)
|
|
||||||
.service(routes::get_raw)
|
.service(routes::get_raw)
|
||||||
|
.service(routes::get_query)
|
||||||
.service(routes::get_object)
|
.service(routes::get_object)
|
||||||
.service(routes::put_object)
|
.service(routes::put_object)
|
||||||
.service(routes::list_hier)
|
.service(routes::delete_object)
|
||||||
.service(routes::get_lookup)
|
|
||||||
.service(routes::api_refresh)
|
.service(routes::api_refresh)
|
||||||
|
.service(routes::list_hier)
|
||||||
.service(
|
.service(
|
||||||
actix_files::Files::new(
|
actix_files::Files::new(
|
||||||
"/",
|
"/",
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::addressing::Address;
|
||||||
use crate::database::{
|
use crate::database::{
|
||||||
insert_entry, query, remove_object, retrieve_file, retrieve_object, DbPool, Entry, Query,
|
insert_entry, query, remove_object, retrieve_file, retrieve_object, DbPool, Entry, Query,
|
||||||
};
|
};
|
||||||
use crate::filesystem::{list_directory, lookup_by_filename, UPath};
|
use crate::filesystem::{list_directory, UPath};
|
||||||
use crate::hash::{decode, encode, Hashable};
|
use crate::hash::{decode, encode, Hashable};
|
||||||
use actix_files::NamedFile;
|
use actix_files::NamedFile;
|
||||||
use actix_web::error::{ErrorBadRequest, ErrorInternalServerError, ErrorNotFound};
|
use actix_web::error::{ErrorBadRequest, ErrorInternalServerError, ErrorNotFound};
|
||||||
|
@ -42,6 +42,25 @@ pub async fn get_raw(state: web::Data<State>, hash: web::Path<String>) -> Result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct QueryRequest {
|
||||||
|
query: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/api/obj")]
|
||||||
|
pub async fn get_query(
|
||||||
|
state: web::Data<State>,
|
||||||
|
web::Query(info): web::Query<QueryRequest>,
|
||||||
|
) -> Result<HttpResponse, Error> {
|
||||||
|
let connection = state.db_pool.get().map_err(ErrorInternalServerError)?;
|
||||||
|
|
||||||
|
let sexp = lexpr::from_str(info.query.as_str()).map_err(ErrorInternalServerError)?;
|
||||||
|
let in_query = Query::from_sexp(&sexp).map_err(ErrorInternalServerError)?;
|
||||||
|
let result = query(&connection, in_query).map_err(ErrorInternalServerError)?;
|
||||||
|
|
||||||
|
Ok(HttpResponse::Ok().json(result))
|
||||||
|
}
|
||||||
|
|
||||||
#[get("/api/obj/{address_str}")]
|
#[get("/api/obj/{address_str}")]
|
||||||
pub async fn get_object(
|
pub async fn get_object(
|
||||||
state: web::Data<State>,
|
state: web::Data<State>,
|
||||||
|
@ -122,41 +141,6 @@ pub async fn list_hier(
|
||||||
Ok(HttpResponse::Ok().json(entries))
|
Ok(HttpResponse::Ok().json(entries))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
pub struct LookupRequest {
|
|
||||||
query: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/api/lookup")]
|
|
||||||
pub async fn get_lookup(
|
|
||||||
state: web::Data<State>,
|
|
||||||
web::Query(info): web::Query<LookupRequest>,
|
|
||||||
) -> Result<HttpResponse, Error> {
|
|
||||||
let connection = state.db_pool.get().map_err(ErrorInternalServerError)?;
|
|
||||||
let response = lookup_by_filename(&connection, info.query).map_err(ErrorInternalServerError)?;
|
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().json(response))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
pub struct QueryRequest {
|
|
||||||
query: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/api/query")]
|
|
||||||
pub async fn get_query(
|
|
||||||
state: web::Data<State>,
|
|
||||||
web::Query(info): web::Query<QueryRequest>,
|
|
||||||
) -> Result<HttpResponse, Error> {
|
|
||||||
let connection = state.db_pool.get().map_err(ErrorInternalServerError)?;
|
|
||||||
|
|
||||||
let sexp = lexpr::from_str(info.query.as_str()).map_err(ErrorInternalServerError)?;
|
|
||||||
let in_query = Query::from_sexp(&sexp).map_err(ErrorInternalServerError)?;
|
|
||||||
let result = query(&connection, in_query).map_err(ErrorInternalServerError)?;
|
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().json(result))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[post("/api/refresh")]
|
#[post("/api/refresh")]
|
||||||
pub async fn api_refresh(state: web::Data<State>) -> Result<HttpResponse, Error> {
|
pub async fn api_refresh(state: web::Data<State>) -> Result<HttpResponse, Error> {
|
||||||
let _pool = state.db_pool.clone();
|
let _pool = state.db_pool.clone();
|
||||||
|
|
Loading…
Reference in New Issue