use diesel::prelude::*; use crate::schema::*; #[derive(Clone, Queryable, Selectable, Insertable, Associations)] #[diesel(belongs_to(super::user::User))] #[diesel(table_name = sessions)] #[diesel(check_for_backend(diesel::sqlite::Sqlite))] pub struct Session { pub id: i64, pub user_id: i64, pub last_seen: i64, } impl Session { // pub fn new_for_user(pool: &DbPool, user_id: i64, last_seen: i64) -> DbResult { // let id: i64 = rand::thread_rng().gen(); // Ok(Self { // id, // user_id, // last_seen, // } // .insert_into(sessions::table) // .returning(Self::as_returning()) // .get_result(&mut pool.get()?)?) // } // pub fn user_from_id(pool: &DbPool, id: i64) -> DbResult> { // Ok(sessions::dsl::sessions // .inner_join(users::table) // .filter(sessions::id.eq(id)) // .select(User::as_select()) // .get_result(&mut pool.get()?) // .optional()?) // } // pub fn user(&self, pool: &DbPool) -> DbResult> { // Self::user_from_id(pool, self.id) // } // pub fn by_id(pool: &DbPool, id: i64) -> DbResult> { // Ok(sessions::dsl::sessions // .find(id) // .get_result(&mut pool.get()?) // .optional()?) // } // pub fn remove(self, pool: &DbPool) -> DbResult { // Self::remove_by_id(pool, self.id) // } // pub fn remove_by_id(pool: &DbPool, id: i64) -> DbResult { // Ok( // diesel::delete(sessions::dsl::sessions.filter(sessions::id.eq(id))) // .execute(&mut pool.get()?)? // > 0, // ) // } }