feat(tools): implement CRUD operations for thoughts and projects
* Add tools for creating, retrieving, updating, and deleting thoughts. * Implement project management tools for creating and listing projects. * Introduce linking functionality between thoughts. * Add search and recall capabilities for thoughts based on semantic queries. * Implement statistics and summarization tools for thought analysis. * Create database migrations for thoughts, projects, and links. * Add helper functions for UUID parsing and project resolution.
This commit is contained in:
37
internal/session/active_project.go
Normal file
37
internal/session/active_project.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type ActiveProjects struct {
|
||||
mu sync.RWMutex
|
||||
bySession map[string]uuid.UUID
|
||||
}
|
||||
|
||||
func NewActiveProjects() *ActiveProjects {
|
||||
return &ActiveProjects{
|
||||
bySession: map[string]uuid.UUID{},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *ActiveProjects) Set(sessionID string, projectID uuid.UUID) {
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
a.bySession[sessionID] = projectID
|
||||
}
|
||||
|
||||
func (a *ActiveProjects) Get(sessionID string) (uuid.UUID, bool) {
|
||||
a.mu.RLock()
|
||||
defer a.mu.RUnlock()
|
||||
projectID, ok := a.bySession[sessionID]
|
||||
return projectID, ok
|
||||
}
|
||||
|
||||
func (a *ActiveProjects) Clear(sessionID string) {
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
delete(a.bySession, sessionID)
|
||||
}
|
||||
27
internal/session/active_project_test.go
Normal file
27
internal/session/active_project_test.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func TestActiveProjectsSetGetClear(t *testing.T) {
|
||||
store := NewActiveProjects()
|
||||
projectID := uuid.New()
|
||||
|
||||
if _, ok := store.Get("session-1"); ok {
|
||||
t.Fatal("Get() before Set() = true, want false")
|
||||
}
|
||||
|
||||
store.Set("session-1", projectID)
|
||||
got, ok := store.Get("session-1")
|
||||
if !ok || got != projectID {
|
||||
t.Fatalf("Get() = (%v, %v), want (%v, true)", got, ok, projectID)
|
||||
}
|
||||
|
||||
store.Clear("session-1")
|
||||
if _, ok := store.Get("session-1"); ok {
|
||||
t.Fatal("Get() after Clear() = true, want false")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user