diff --git a/backend/src/bin/worker.rs b/backend/src/bin/worker.rs index 8488083..b22522e 100644 --- a/backend/src/bin/worker.rs +++ b/backend/src/bin/worker.rs @@ -14,7 +14,7 @@ async fn main() -> anyhow::Result<()> { init_tracing(); let config = AppConfig::from_env()?; - let pool = db::init_pool(&config.database_url)?; + let pool = db::init_pool_with_size(&config.database_url, 1)?; let s3_client = build_client(&config).await?; let storage = Arc::new(S3Storage::new(s3_client, config.s3_bucket.clone())); let jwt = JwtService::from_config(&config)?; diff --git a/backend/src/db.rs b/backend/src/db.rs index 03834fa..ccd84ca 100644 --- a/backend/src/db.rs +++ b/backend/src/db.rs @@ -5,10 +5,17 @@ use diesel::r2d2::{ConnectionManager, Pool}; pub type PgPool = Pool>; +const DEFAULT_MAX_POOL_SIZE: u32 = 2; + pub fn init_pool(database_url: &str) -> anyhow::Result { + init_pool_with_size(database_url, DEFAULT_MAX_POOL_SIZE) +} + +pub fn init_pool_with_size(database_url: &str, max_size: u32) -> anyhow::Result { let manager = ConnectionManager::::new(database_url); + let pool_size = max_size.max(1); let pool = Pool::builder() - .max_size(16) + .max_size(pool_size) .connection_timeout(Duration::from_secs(10)) .build(manager)?; Ok(pool) diff --git a/frontend/src/index.jsx b/frontend/src/index.jsx index 4782b74..0248042 100644 --- a/frontend/src/index.jsx +++ b/frontend/src/index.jsx @@ -323,8 +323,8 @@ const AppLayout = () => { const location = useLocation(); const appState = useAppState(); const appDispatch = useAppDispatch(); - const folderMatch = matchPath('/folders/:folderId', location.pathname); - const nestedDocMatch = matchPath('/folders/:folderId/documents/:documentId', location.pathname); + const folderMatch = matchPath('/documents/folder/:folderId', location.pathname); + const nestedDocMatch = matchPath('/documents/folder/:folderId/documents/:documentId', location.pathname); const docMatch = nestedDocMatch || matchPath('/documents/:documentId', location.pathname); const routeFolderId = folderMatch?.params?.folderId || nestedDocMatch?.params?.folderId || null; @@ -1741,7 +1741,7 @@ const AppLayout = () => { return; } - const path = targetId === 'root' ? '/folders' : `/folders/${targetId}`; + const path = targetId === 'root' ? '/documents' : `/documents/folder/${targetId}`; navigate(path, { replace }); }, [loadFolder, navigate], @@ -3155,7 +3155,7 @@ const AppLayout = () => { return; } - const path = targetId === 'root' ? '/folders' : `/folders/${targetId}`; + const path = targetId === 'root' ? '/documents' : `/documents/folder/${targetId}`; navigate(path, { replace: false }); }, [navigate, selectedFolder, loadFolder], @@ -4669,7 +4669,7 @@ const LoginRoute = () => { if (typeof target === 'string' && target.startsWith('/')) { return target; } - return '/folders'; + return '/documents'; }, [location.state]); if (appStatus !== 'logged-out' && appStatus !== 'authenticating') { @@ -4734,17 +4734,17 @@ const AppRouter = () => ( } /> }> - } /> - } /> - } /> - } /> + } /> + } /> + } /> } /> + } /> } /> } /> - } /> + } /> ); diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 4a2c56e..9a5e176 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -782,6 +782,7 @@ button.icon-button.ghost:hover:not([disabled]) { .folder-row:hover { background: var(--sidebar-hover-bg); + color: var(--fg); } .folder-row.active { @@ -859,7 +860,7 @@ button.icon-button.ghost:hover:not([disabled]) { gap: 0.28rem; overflow-y: auto; padding: 1.25rem; - color: var(--sidebar-fg, #6f7683); + color: var(--sidebar-fg); } .sidebar-section:first-of-type,