use chrono::NaiveDateTime; use chrono::Utc; use diesel::prelude::*; use crate::database::schema::form; use crate::database::schema::form::dsl::*; use crate::database::structs::Form; use crate::DbConn; #[table_name = "form"] #[derive(Serialize, Insertable)] pub struct InsertableForm<'b> { pub created_at: NaiveDateTime, pub lastvisit_at: NaiveDateTime, pub token: &'b str, pub nc_username: &'b str, pub nc_password: &'b str, } impl Form { // gets a Form from a token. // also updates lastvisit_at. pub fn get_from_token( i_token: &str, conn: &DbConn, ) -> Result, diesel::result::Error> { if let Some(formdata) = form .filter(token.eq(i_token)) .first::
(conn) .optional()? { match formdata.update_lastvisit(conn) { Ok(_) => Ok(Some(formdata)), Err(e) => Err(e), } } else { Ok(None) } } pub fn update_lastvisit(&self, conn: &DbConn) -> Result { diesel::update(form.find(self.id)) .set(lastvisit_at.eq(Utc::now().naive_utc())) .execute(conn) } pub fn insert<'b>( i_form: InsertableForm<'b>, conn: &DbConn, ) -> Result, diesel::result::Error> { match diesel::insert_into(form).values(&i_form).execute(conn) { Ok(_) => Ok(i_form), Err(e) => Err(e), } } }