algohub_server/models/
asset.rs

1use std::path::PathBuf;
2
3use rocket::{
4    fs::{NamedFile, TempFile},
5    response::Responder,
6};
7use serde::{Deserialize, Serialize};
8use surrealdb::sql::Thing;
9
10use super::{Credentials, UserRecordId};
11
12#[derive(Serialize, Deserialize)]
13pub struct Asset {
14    pub id: Option<Thing>,
15    pub name: String,
16    pub owner: Thing,
17    pub path: PathBuf,
18}
19
20#[derive(FromForm)]
21pub struct CreateAsset<'a> {
22    pub auth: Credentials<'a>,
23    pub owner: UserRecordId,
24    pub file: TempFile<'a>,
25}
26
27#[derive(Serialize, Deserialize)]
28pub struct UserContent {
29    pub id: String,
30    pub name: String,
31}
32
33pub struct AssetFile(pub(crate) NamedFile);
34
35impl<'r, 'o: 'r> Responder<'r, 'o> for AssetFile {
36    fn respond_to(self, req: &rocket::Request) -> rocket::response::Result<'o> {
37        rocket::Response::build_from(self.0.respond_to(req)?)
38            .raw_header("Cache-control", "max-age=86400") //  24h (24*60*60)
39            .ok()
40    }
41}