show deleted file info and add download count
All checks were successful
build docker container automatically / build (push) Successful in 3m25s
All checks were successful
build docker container automatically / build (push) Successful in 3m25s
This commit is contained in:
@ -6,6 +6,8 @@ use diesel::prelude::*;
|
|||||||
#[cfg(feature = "server")]
|
#[cfg(feature = "server")]
|
||||||
use httpserver::DB;
|
use httpserver::DB;
|
||||||
|
|
||||||
|
#[cfg(feature = "server")]
|
||||||
|
use httpserver::models::GetFile;
|
||||||
#[cfg(feature = "server")]
|
#[cfg(feature = "server")]
|
||||||
use httpserver::schema;
|
use httpserver::schema;
|
||||||
|
|
||||||
@ -37,10 +39,10 @@ async fn download_file(id: String) -> Result<FileStream, HttpError> {
|
|||||||
use schema::file;
|
use schema::file;
|
||||||
let s_config = ServerConfig::load();
|
let s_config = ServerConfig::load();
|
||||||
|
|
||||||
let result = DB.with(|pool| schema::file::table.select(file::filename)
|
let result = DB.with(|pool| GetFile::query()
|
||||||
.filter(file::stored_filename.eq(id.clone()))
|
.filter(file::stored_filename.eq(id.clone()))
|
||||||
.filter(file::deleted.eq(false))
|
.filter(file::deleted.eq(false))
|
||||||
.load::<String>(&mut pool.get().unwrap()));
|
.load(&mut pool.get().unwrap()));
|
||||||
|
|
||||||
if let Err(_) = result {
|
if let Err(_) = result {
|
||||||
return HttpError::internal_server_error("Database request failed");
|
return HttpError::internal_server_error("Database request failed");
|
||||||
@ -56,10 +58,12 @@ async fn download_file(id: String) -> Result<FileStream, HttpError> {
|
|||||||
let path = Path::new(&file_path);
|
let path = Path::new(&file_path);
|
||||||
|
|
||||||
// create a filestream from raw to set the filename to the uploaded filename
|
// create a filestream from raw to set the filename to the uploaded filename
|
||||||
let fstream = create_filestream(db_file[0].clone(), path.into()).await;
|
let fstream = create_filestream(db_file[0].filename.clone(), path.into()).await;
|
||||||
|
|
||||||
match fstream {
|
match fstream {
|
||||||
Ok(stream) => {
|
Ok(stream) => {
|
||||||
|
DB.with(|pool| diesel::update(&db_file[0]).set(file::downloads.eq(file::downloads + 1))
|
||||||
|
.execute(&mut pool.get().unwrap()));
|
||||||
Ok(stream)
|
Ok(stream)
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|||||||
@ -22,16 +22,17 @@ struct FetchedInfo {
|
|||||||
filename: String,
|
filename: String,
|
||||||
size: i64,
|
size: i64,
|
||||||
created_at: DateTime<Utc>,
|
created_at: DateTime<Utc>,
|
||||||
|
downloads: i64,
|
||||||
|
deleted: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[get("/api/upload/info?filename")]
|
#[get("/api/upload/info?filename")]
|
||||||
async fn get_file_info(filename: String) -> Result<FetchedInfo, HttpError> {
|
async fn get_file_info(filename: String) -> Result<FetchedInfo, HttpError> {
|
||||||
use schema::file;
|
use schema::file;
|
||||||
let result = DB.with(|pool| schema::file::table.select((file::filename, file::file_size, file::created_at))
|
let result = DB.with(|pool| schema::file::table.select((file::filename, file::file_size, file::created_at, file::downloads, file::deleted))
|
||||||
.filter(file::stored_filename.eq(filename))
|
.filter(file::stored_filename.eq(filename))
|
||||||
.filter(file::deleted.eq(false))
|
.load::<(String, i64, SystemTime, i64, bool)>(&mut pool.get().unwrap()));
|
||||||
.load::<(String, i64, SystemTime)>(&mut pool.get().unwrap()));
|
|
||||||
|
|
||||||
if let Err(_) = result {
|
if let Err(_) = result {
|
||||||
return HttpError::internal_server_error("Database request failed");
|
return HttpError::internal_server_error("Database request failed");
|
||||||
@ -43,7 +44,7 @@ async fn get_file_info(filename: String) -> Result<FetchedInfo, HttpError> {
|
|||||||
|
|
||||||
let db_file = &db_file[0];
|
let db_file = &db_file[0];
|
||||||
|
|
||||||
Ok(FetchedInfo { filename: db_file.0.clone(), size: db_file.1, created_at: db_file.2.into()})
|
Ok(FetchedInfo { filename: db_file.0.clone(), size: db_file.1, created_at: db_file.2.into(), downloads: db_file.3, deleted: db_file.4})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn show_file_info(file_id: String, file_info: &FetchedInfo) -> Element {
|
fn show_file_info(file_id: String, file_info: &FetchedInfo) -> Element {
|
||||||
@ -55,6 +56,11 @@ fn show_file_info(file_id: String, file_info: &FetchedInfo) -> Element {
|
|||||||
p { "File name : {file_info.filename}" }
|
p { "File name : {file_info.filename}" }
|
||||||
p { "This file was uploaded on the {creation_date}" }
|
p { "This file was uploaded on the {creation_date}" }
|
||||||
p { "File size : {byte_to_human_size(file_info.size.try_into().unwrap())}" }
|
p { "File size : {byte_to_human_size(file_info.size.try_into().unwrap())}" }
|
||||||
|
p { "This file was downloaded {file_info.downloads} times "}
|
||||||
|
if file_info.deleted {
|
||||||
|
p { "This was deleted" }
|
||||||
|
}
|
||||||
|
else {
|
||||||
a {
|
a {
|
||||||
class: "height-20px text-blue-800 underline",
|
class: "height-20px text-blue-800 underline",
|
||||||
rel: "noopener noreferrer",
|
rel: "noopener noreferrer",
|
||||||
@ -65,6 +71,7 @@ fn show_file_info(file_id: String, file_info: &FetchedInfo) -> Element {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn FileInfo(file: String) -> Element {
|
pub fn FileInfo(file: String) -> Element {
|
||||||
|
|||||||
Reference in New Issue
Block a user