feat: add image models
							parent
							
								
									3568365c6f
								
							
						
					
					
						commit
						c10b9baa95
					
				| 
						 | 
				
			
			@ -157,6 +157,7 @@ dependencies = [
 | 
			
		|||
 "matchit",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "mime",
 | 
			
		||||
 "multer",
 | 
			
		||||
 "percent-encoding",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
 "rustversion",
 | 
			
		||||
| 
						 | 
				
			
			@ -634,6 +635,15 @@ version = "1.13.0"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "encoding_rs"
 | 
			
		||||
version = "0.8.35"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "equivalent"
 | 
			
		||||
version = "1.0.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -1053,6 +1063,23 @@ dependencies = [
 | 
			
		|||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "multer"
 | 
			
		||||
version = "3.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes",
 | 
			
		||||
 "encoding_rs",
 | 
			
		||||
 "futures-util",
 | 
			
		||||
 "http",
 | 
			
		||||
 "httparse",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "mime",
 | 
			
		||||
 "spin",
 | 
			
		||||
 "version_check",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "nu-ansi-term"
 | 
			
		||||
version = "0.46.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -1533,6 +1560,12 @@ dependencies = [
 | 
			
		|||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "spin"
 | 
			
		||||
version = "0.9.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "strsim"
 | 
			
		||||
version = "0.11.1"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ name = "calathea"
 | 
			
		|||
 | 
			
		||||
[dependencies]
 | 
			
		||||
argon2 = "0.5.3"
 | 
			
		||||
axum = { version = "0.8.0", features = ["macros"] }
 | 
			
		||||
axum = { version = "0.8.0", features = ["macros", "multipart"] }
 | 
			
		||||
axum-extra = { version = "0.10.0", features = ["cookie"] }
 | 
			
		||||
chrono = { version = "0.4.39", features = ["serde"] }
 | 
			
		||||
clap = { version = "4.5.26", features = ["derive", "env"] }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
drop table images;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
create table images (
 | 
			
		||||
    id integer primary key not null,
 | 
			
		||||
    plant_id integer not null
 | 
			
		||||
        references plants (id)
 | 
			
		||||
        -- Keep entries in the database so the files can be removed later
 | 
			
		||||
        on delete set null,
 | 
			
		||||
    date_taken date not null,
 | 
			
		||||
    note text
 | 
			
		||||
);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
use diesel::prelude::*;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use chrono::NaiveDate;
 | 
			
		||||
 | 
			
		||||
use crate::db::{schema::*, DbPool, DbResult};
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Queryable, Selectable)]
 | 
			
		||||
#[diesel(table_name = images)]
 | 
			
		||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
 | 
			
		||||
pub struct Image {
 | 
			
		||||
    id: i32,
 | 
			
		||||
    plant_id: i32,
 | 
			
		||||
    date_taken: NaiveDate,
 | 
			
		||||
    note: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Deserialize, Insertable)]
 | 
			
		||||
#[diesel(table_name = images)]
 | 
			
		||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
 | 
			
		||||
pub struct NewImage {
 | 
			
		||||
    plant_id: i32,
 | 
			
		||||
    date_taken: NaiveDate,
 | 
			
		||||
    note: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl NewImage {
 | 
			
		||||
    pub fn insert(self, pool: &DbPool) -> DbResult<Image> {
 | 
			
		||||
        Ok(self
 | 
			
		||||
            .insert_into(images::table)
 | 
			
		||||
            .returning(Image::as_returning())
 | 
			
		||||
            .get_result(&mut pool.get()?)?)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,3 +2,4 @@ pub mod event;
 | 
			
		|||
pub mod plant;
 | 
			
		||||
pub mod session;
 | 
			
		||||
pub mod user;
 | 
			
		||||
pub mod image;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,15 @@ diesel::table! {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
diesel::table! {
 | 
			
		||||
    images (id) {
 | 
			
		||||
        id -> Integer,
 | 
			
		||||
        plant_id -> Integer,
 | 
			
		||||
        date_taken -> Date,
 | 
			
		||||
        note -> Nullable<Text>,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
diesel::table! {
 | 
			
		||||
    plants (id) {
 | 
			
		||||
        id -> Integer,
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +45,13 @@ diesel::table! {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
diesel::joinable!(events -> plants (plant_id));
 | 
			
		||||
diesel::joinable!(images -> plants (plant_id));
 | 
			
		||||
diesel::joinable!(sessions -> users (user_id));
 | 
			
		||||
 | 
			
		||||
diesel::allow_tables_to_appear_in_same_query!(events, plants, sessions, users,);
 | 
			
		||||
diesel::allow_tables_to_appear_in_same_query!(
 | 
			
		||||
    events,
 | 
			
		||||
    images,
 | 
			
		||||
    plants,
 | 
			
		||||
    sessions,
 | 
			
		||||
    users,
 | 
			
		||||
);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue