From 764bd28d08ceaef03cd4050f9568a62d77bbcfca Mon Sep 17 00:00:00 2001 From: soryu Date: Thu, 15 Jan 2026 03:37:44 +0000 Subject: Add repository history feature to store and suggest previously used repositories (#18) - Add repository_history table migration with repo_type, repo_path, use_count, last_used_at - Add RepositoryHistoryEntry model and CRUD database functions - Create API endpoints: GET/POST/DELETE /api/v1/repository-history, GET /api/v1/repository-history/suggestions - Update add_remote_repository and add_local_repository handlers to automatically track history - Update frontend API with repository history types and functions - Add Repository History section to Settings page with list of entries and delete functionality - Add suggestions dropdown to RepositoryPanel when entering new repository URL/path - Suggestions filter by repo type (remote vs local) and match on user input Test plan: - Add a remote repository to a contract - verify it appears in Settings history - Add a local repository to a contract - verify it appears in Settings history - Add same repository again - verify use_count increments, not duplicate - When adding new repository, verify suggestions appear based on history - Delete a history entry from Settings - verify it's removed - Verify suggestions only show matching type (remote for remote, local for local) Co-authored-by: Claude Opus 4.5 --- makima/src/server/handlers/contracts.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'makima/src/server/handlers/contracts.rs') diff --git a/makima/src/server/handlers/contracts.rs b/makima/src/server/handlers/contracts.rs index a3aa00a..3ce29e1 100644 --- a/makima/src/server/handlers/contracts.rs +++ b/makima/src/server/handlers/contracts.rs @@ -631,6 +631,22 @@ pub async fn add_remote_repository( Ok(repo) => { // Update supervisor task with repository info if this is a primary repo update_supervisor_with_repo_if_needed(pool, id, auth.owner_id, &repo).await; + + // Track repository in history for future suggestions + if let Err(e) = repository::add_or_update_repository_history( + pool, + auth.owner_id, + &req.name, + Some(&req.repository_url), + None, + "remote", + ) + .await + { + // Log but don't fail the request if history tracking fails + tracing::warn!("Failed to track repository in history: {}", e); + } + (StatusCode::CREATED, Json(repo)).into_response() } Err(e) => { @@ -705,6 +721,22 @@ pub async fn add_local_repository( Ok(repo) => { // Update supervisor task with repository info if this is a primary repo update_supervisor_with_repo_if_needed(pool, id, auth.owner_id, &repo).await; + + // Track repository in history for future suggestions + if let Err(e) = repository::add_or_update_repository_history( + pool, + auth.owner_id, + &req.name, + None, + Some(&req.local_path), + "local", + ) + .await + { + // Log but don't fail the request if history tracking fails + tracing::warn!("Failed to track repository in history: {}", e); + } + (StatusCode::CREATED, Json(repo)).into_response() } Err(e) => { -- cgit v1.2.3