use actix::prelude::*; use actix_files::NamedFile; use actix_web::{error, get, post, web, Error, HttpResponse}; use std::path::PathBuf; pub struct State { pub directory: PathBuf, pub db: Addr, pub hasher: Addr, } #[get("/raw/{hash}")] pub async fn get_raw(state: web::Data, hash: web::Path) -> Result { let response = state .db .send(crate::database::RetrieveByHash { hash: hash.into_inner(), }) .await?; match response { Ok(result) => match result { Some(path) => Ok(NamedFile::open(path)?), None => Err(error::ErrorNotFound("NOT FOUND")), }, Err(e) => Err(error::ErrorInternalServerError(e)), } } #[post("/api/refresh")] pub async fn api_refresh(state: web::Data) -> Result { crate::dataops::update_directory(&state.directory, &state.db, &state.hasher) .await .map_err(|_| error::ErrorInternalServerError("UPDATE ERROR"))?; Ok(HttpResponse::Ok().finish()) }