this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

SQLite impls for those

+40 -7
+14 -3
server/src/database.rs
··· 36 36 created_at INT NOT NULL)", 37 37 [], 38 38 ); 39 - let _ = conn.execute("PRAGMA WAL_MODE = NORMAL", []); 39 + let _ = conn.execute("PRAGMA journal_mode = WAL;", []); 40 + let _ = conn.execute("PRAGMA foreign_keys = ON;", []); 41 + let _ = conn.execute("PRAGMA temp_store = '2'", []); 40 42 }; 41 43 let _ = tokio::spawn(maintain(DbConn::SqliteConnectionPool(pool.clone()))); 42 44 Ok(DbConn::SqliteConnectionPool(pool)) ··· 160 162 .await; 161 163 } 162 164 } 163 - DbConn::SqliteConnectionPool(_) => { 164 - todo!() 165 + DbConn::SqliteConnectionPool(pool) => { 166 + let mut interval = tokio::time::interval(std::time::Duration::from_secs(60)); 167 + loop { 168 + interval.tick().await; 169 + let conn = pool.get().unwrap(); 170 + // Delete any sessions older than 20 days 171 + let _ = conn.execute( 172 + "DELETE FROM sessions WHERE created_at < strftime('%s', 'now') - 1728000", 173 + [], 174 + ); 175 + } 165 176 } 166 177 } 167 178 }
+26 -4
server/src/user.rs
··· 259 259 ); 260 260 Ok((session_key, user)) 261 261 } 262 - DbConn::SqliteConnectionPool(_) => { 263 - todo!() 262 + DbConn::SqliteConnectionPool(pool) => { 263 + let conn = pool.get().map_err(LuminaError::SqlitePool)?; 264 + let user_id_str = user_id.to_string(); 265 + let session_key = Uuid::new_v4().to_string(); 266 + conn.execute( 267 + "INSERT INTO sessions (user_id, session_key) VALUES (?1, ?2)", 268 + &[&user_id_str, &session_key], 269 + ) 270 + .map_err(LuminaError::Sqlite)?; 271 + println!( 272 + "{info} New session created by {}", 273 + user.clone().username.color_bright_cyan() 274 + ); 275 + Ok((session_key, user)) 264 276 } 265 277 } 266 278 } ··· 280 292 username: user.get(2), 281 293 }) 282 294 } 283 - DbConn::SqliteConnectionPool(_) => { 284 - todo!() 295 + DbConn::SqliteConnectionPool(pool) => { 296 + let conn = pool.get().map_err(LuminaError::SqlitePool)?; 297 + let user = conn.query_row("SELECT users.id, users.email, users.username FROM users JOIN sessions ON users.id = sessions.user_id WHERE sessions.session_key = ?1", &[&token], 298 + |row| { 299 + let a: String = row.get(0).unwrap(); 300 + Ok(User { 301 + id: Uuid::from_str(a.as_str()).unwrap(), 302 + email: row.get(1).unwrap(), 303 + username: row.get(2).unwrap(), 304 + }) 305 + }).map_err(LuminaError::Sqlite)?; 306 + Ok(user) 285 307 } 286 308 } 287 309 }