consolidate API routes, remove lookup_by_filename

feat/vaults
Tomáš Mládek 2021-02-20 12:12:48 +01:00
parent f5dd4141b1
commit c0e1f42533
3 changed files with 23 additions and 59 deletions

View File

@ -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)]
mod tests {
use crate::filesystem::{UDirectory, UPath};

View File

@ -83,13 +83,13 @@ fn main() -> Result<()> {
App::new()
.data(state.clone())
.wrap(middleware::Logger::default())
.service(routes::get_query)
.service(routes::get_raw)
.service(routes::get_query)
.service(routes::get_object)
.service(routes::put_object)
.service(routes::list_hier)
.service(routes::get_lookup)
.service(routes::delete_object)
.service(routes::api_refresh)
.service(routes::list_hier)
.service(
actix_files::Files::new(
"/",

View File

@ -2,7 +2,7 @@ use crate::addressing::Address;
use crate::database::{
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 actix_files::NamedFile;
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}")]
pub async fn get_object(
state: web::Data<State>,
@ -122,41 +141,6 @@ pub async fn list_hier(
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")]
pub async fn api_refresh(state: web::Data<State>) -> Result<HttpResponse, Error> {
let _pool = state.db_pool.clone();