diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-06-12 01:54:21 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-06-12 01:54:21 +0200 |
| commit | bbdf38018b47328b5faa2cef635c37095045be72 (patch) | |
| tree | 8983817d547551ae12508a8ae8731b622d990af4 /crates/turtle/src/atuin_server | |
| parent | feat(server): Make user stuff stateless (diff) | |
| download | atuin-bbdf38018b47328b5faa2cef635c37095045be72.zip | |
feat(server): Really make users stateless (with tests)
This commit also remove another load of unneeded features.
Diffstat (limited to 'crates/turtle/src/atuin_server')
| -rw-r--r-- | crates/turtle/src/atuin_server/database/calendar.rs | 18 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_server/database/db/mod.rs | 13 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_server/database/db/wrappers.rs | 16 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_server/database/mod.rs | 6 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_server/mod.rs | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_server/router.rs | 6 |
6 files changed, 17 insertions, 46 deletions
diff --git a/crates/turtle/src/atuin_server/database/calendar.rs b/crates/turtle/src/atuin_server/database/calendar.rs deleted file mode 100644 index f1c78262..00000000 --- a/crates/turtle/src/atuin_server/database/calendar.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Calendar data - -use serde::{Deserialize, Serialize}; -use time::Month; - -pub(crate) enum TimePeriod { - Year, - Month { year: i32 }, - Day { year: i32, month: Month }, -} - -#[derive(Debug, Serialize, Deserialize)] -pub(crate) struct TimePeriodInfo { - pub(crate) count: u64, - - // TODO: Use this for merkle tree magic - pub(crate) hash: String, -} diff --git a/crates/turtle/src/atuin_server/database/db/mod.rs b/crates/turtle/src/atuin_server/database/db/mod.rs index 4ec51bf1..5b3c169b 100644 --- a/crates/turtle/src/atuin_server/database/db/mod.rs +++ b/crates/turtle/src/atuin_server/database/db/mod.rs @@ -17,13 +17,13 @@ mod wrappers; const MIN_PG_VERSION: u32 = 14; #[derive(Clone)] -pub struct Database { +pub struct ServerPostgres { pool: sqlx::Pool<sqlx::postgres::Postgres>, /// Optional read replica pool for read-only queries read_pool: Option<sqlx::Pool<sqlx::postgres::Postgres>>, } -impl Database { +impl ServerPostgres { /// Returns the appropriate pool for read operations. /// Uses read_pool if available, otherwise falls back to the primary pool. fn read_pool(&self) -> &sqlx::Pool<sqlx::postgres::Postgres> { @@ -31,7 +31,7 @@ impl Database { } } -impl Database { +impl ServerPostgres { pub(crate) async fn new(settings: &DbSettings) -> DbResult<Self> { let pool = PgPoolOptions::new() .max_connections(100) @@ -138,7 +138,7 @@ impl Database { .entry((i.host.id, &i.tag)) .and_modify(|e| { if i.idx > *e { - *e = i.idx + *e = i.idx; } }) .or_insert(i.idx); @@ -229,7 +229,8 @@ impl Database { // 3. If we don't use the cache, read from the store table // IDX_CACHE_ROLLOUT should be between 0 and 100. - let idx_cache_rollout = std::env::var("IDX_CACHE_ROLLOUT").unwrap_or("0".to_string()); + let idx_cache_rollout = + std::env::var("IDX_CACHE_ROLLOUT").unwrap_or_else(|_| "0".to_string()); let idx_cache_rollout = idx_cache_rollout.parse::<f64>().unwrap_or(0.0); let use_idx_cache = rand::thread_rng().gen_bool(idx_cache_rollout / 100.0); @@ -264,7 +265,7 @@ impl Database { let mut status = RecordStatus::new(); - for i in res.iter() { + for i in &res { status.set_raw(HostId(i.0), i.1.clone(), i.2 as u64); } diff --git a/crates/turtle/src/atuin_server/database/db/wrappers.rs b/crates/turtle/src/atuin_server/database/db/wrappers.rs index 40fd5b4a..8a52d56e 100644 --- a/crates/turtle/src/atuin_server/database/db/wrappers.rs +++ b/crates/turtle/src/atuin_server/database/db/wrappers.rs @@ -1,22 +1,8 @@ -use crate::{ - atuin_common::record::{EncryptedData, Host, Record}, - atuin_server::database::models::Session, -}; +use crate::atuin_common::record::{EncryptedData, Host, Record}; use sqlx::{Row, postgres::PgRow}; -pub struct DbSession(pub Session); pub struct DbRecord(pub Record<EncryptedData>); -impl<'a> ::sqlx::FromRow<'a, PgRow> for DbSession { - fn from_row(row: &'a PgRow) -> ::sqlx::Result<Self> { - Ok(Self(Session { - id: row.try_get("id")?, - user_id: row.try_get("user_id")?, - token: row.try_get("token")?, - })) - } -} - impl<'a> ::sqlx::FromRow<'a, PgRow> for DbRecord { fn from_row(row: &'a PgRow) -> ::sqlx::Result<Self> { let timestamp: i64 = row.try_get("timestamp")?; diff --git a/crates/turtle/src/atuin_server/database/mod.rs b/crates/turtle/src/atuin_server/database/mod.rs index a009ae1f..bb64767a 100644 --- a/crates/turtle/src/atuin_server/database/mod.rs +++ b/crates/turtle/src/atuin_server/database/mod.rs @@ -1,4 +1,3 @@ -pub(crate) mod calendar; pub(crate) mod db; pub(crate) mod models; @@ -14,7 +13,10 @@ pub(crate) enum DbError { impl Display for DbError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:?}") + match self { + DbError::NotFound => write!(f, "Not found"), + DbError::Other(report) => write!(f, "Other: {report}"), + } } } diff --git a/crates/turtle/src/atuin_server/mod.rs b/crates/turtle/src/atuin_server/mod.rs index c96a13bc..a4b10acf 100644 --- a/crates/turtle/src/atuin_server/mod.rs +++ b/crates/turtle/src/atuin_server/mod.rs @@ -2,7 +2,7 @@ use std::future::Future; use std::net::SocketAddr; use axum::{Router, serve}; -use database::db::Database; +use database::db::ServerPostgres; use eyre::{Context, Result}; pub(crate) mod database; @@ -78,7 +78,7 @@ pub(crate) async fn launch_metrics_server(host: String, port: u16) -> Result<()> } async fn make_router(settings: Settings) -> Result<Router, eyre::Error> { - let db = Database::new(&settings.db_settings) + let db = ServerPostgres::new(&settings.db_settings) .await .wrap_err_with(|| format!("failed to connect to db: {:?}", settings.db_settings))?; let r = router::router(db, settings); diff --git a/crates/turtle/src/atuin_server/router.rs b/crates/turtle/src/atuin_server/router.rs index dfc2cac4..d9cfc979 100644 --- a/crates/turtle/src/atuin_server/router.rs +++ b/crates/turtle/src/atuin_server/router.rs @@ -1,6 +1,6 @@ use crate::{ atuin_common::api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ErrorResponse}, - atuin_server::database::{db::Database, models::User}, + atuin_server::database::{db::ServerPostgres, models::User}, }; use axum::{ Router, @@ -67,11 +67,11 @@ async fn semver(request: Request, next: Next) -> Response { #[derive(Clone)] pub(crate) struct AppState { - pub(crate) database: Database, + pub(crate) database: ServerPostgres, pub(crate) settings: Settings, } -pub(crate) fn router(database: Database, settings: Settings) -> Router { +pub(crate) fn router(database: ServerPostgres, settings: Settings) -> Router { let routes = Router::new() .route("/", get(handlers::index)) .route("/api/v0/{user_id}/record", post(handlers::v0::record::post)) |
