FoundationDB Models Implementation Checklist
Created: 2025-10-14 Status: ✅ PHASE 1 & 2 COMPLETE Goal: Implement 10 FDB models in 2 phases for t2 MVP
📋 PHASE 1: CORE MULTI-TENANT FOUNDATION (4 Models)
1. Models Implementation
-
Tenant Model (V4 TENANT-MODEL pattern)
- TenantPlan enum (Free/Starter/Pro/Enterprise)
- TenantSettings struct (limits, features)
- TenantType enum (Self/Organization)
- new_self_tenant() constructor
- new_organization() constructor
-
User Model (V4 USER-MODEL pattern)
- UserRole enum (Admin/Developer/Manager/Viewer)
- Argon2id password_hash field
- is_active, email_verified fields
- last_login_at tracking
- new() constructor
- full_name() helper
-
AuthSession Model (V4 SESSION-MODEL pattern)
- token_family for JWT rotation
- expires_at / refresh_expires_at
- ip_address / user_agent tracking
- workspace_session_id link
- new() constructor
- rotate() method for token refresh
-
workspaceSession Model (NEW for V5)
- workspace_path, active_files
- editorState, terminalState, Breakpoint structs
- conversation_id, context_files
- SessionMemory (facts, decisions)
- parent_session_id, related_sessions
- tags for cross-session queries
- new() constructor
- fork() method for creating child sessions
2. Repository Implementation
-
Base FdbRepository trait
- build_key() - tenant-prefixed key builder
- serialize() / deserialize() helpers
- transaction retry logic
-
TenantRepository
- create(tenant) - FDB key:
/{tenant_id}/tenant - get_by_id(tenant_id)
- update(tenant)
- delete(tenant_id)
- list_active_tenants()
- create(tenant) - FDB key:
-
UserRepository (enhance existing)
- Use tenant-prefixed keys:
/{tenant_id}/users/{user_id} - Secondary index:
/{tenant_id}/users_by_email/{email} - create_with_tenant() - atomic user+tenant creation
- get_by_id(tenant_id, user_id)
- get_by_email(tenant_id, email)
- update(user)
- delete(tenant_id, user_id)
- list_by_tenant(tenant_id)
- Use tenant-prefixed keys:
-
AuthSessionRepository
- Primary key:
/{tenant_id}/auth_sessions/{session_id} - Index:
/{tenant_id}/auth_sessions_by_user/{user_id} - Index:
/{tenant_id}/auth_sessions_by_family/{token_family} - create(session)
- get_by_id(tenant_id, session_id)
- get_by_token_family(tenant_id, token_family)
- rotate_tokens(session) - create new session, blacklist old
- invalidate_family(token_family) - logout all devices
- cleanup_expired() - background job
- Primary key:
-
workspaceSessionRepository
- Primary key:
/{tenant_id}/workspace_sessions/{session_id} - Index:
/{tenant_id}/workspace_sessions_by_user/{user_id} - Index:
/{tenant_id}/sessions_by_workspace/{workspace_path} - Index:
/{tenant_id}/recent_sessions/{user_id}(sorted) - Index:
/{tenant_id}/session_children/{parent_id} - Index:
/{tenant_id}/sessions_by_conversation/{conversation_id} - create(session)
- get_by_id(tenant_id, session_id)
- get_by_user(tenant_id, user_id, limit)
- get_related_sessions(tenant_id, user_id, tags, limit)
- get_children(tenant_id, parent_session_id)
- update(session) - update state (files, editor, terminal)
- delete(tenant_id, session_id)
- Primary key:
3. Testing & Integration
- Unit tests for all models
- Unit tests for all repositories
- Integration test: Create user + tenant atomically
- Integration test: JWT token rotation flow
- Integration test: workspace session persistence
- Integration test: Cross-session queries by tags
- Performance test: Range scans on indexes
📋 PHASE 2: INTELLIGENCE LAYER (6 Models)
1. Models Implementation
-
Conversation Model (V4 CONVERSATION-MODEL pattern)
- id, tenant_id, user_id
- workspace_session_id link (not generic session_id)
- ai_provider, title, description
- tags, status (Active/Archived/Deleted)
- message_count, token_count
- related_conversations (cross-session)
- summary (AI-generated for context)
-
Message Model (NEW - separate from Conversation)
- message_id, conversation_id, tenant_id
- role (User/Assistant/System)
- content, model (which llm was used)
- token_count, created_at
-
Audit Model (V4 AUDIT-MODEL pattern)
- audit_id, tenant_id, user_id
- event_type, event_data
- session_id, workspace_session_id links
- ip_address, user_agent
- created_at
-
File Model (NEW - workspace file metadata)
- file_id, tenant_id, workspace_session_id
- file_path, file_size, mime_type
- checksum (SHA-256 from file-monitor)
- created_at, updated_at, last_accessed_at
- is_deleted (soft delete)
-
Agent Model (V4 AGENT-MODELS pattern)
- agent_id, tenant_id, name
- agent_type (Coordinator/Specialist/SubAgent)
- config (MCP tools, A2A capabilities)
- memory (cross-session memory)
- is_active
-
Setting Model (NEW - user preferences)
- setting_id, tenant_id, user_id
- category (editor/theme/llm)
- key (default_model, theme, etc.)
- value (JSON)
- updated_at
2. Repository Implementation
-
ConversationRepository
- Primary key:
/{tenant_id}/conversations/{conversation_id} - Index:
/{tenant_id}/conversations_by_user/{user_id} - Index:
/{tenant_id}/conversations_by_session/{session_id} - create(conversation)
- get_by_id(tenant_id, conversation_id)
- get_by_session(tenant_id, session_id)
- list_by_user(tenant_id, user_id, limit)
- update(conversation)
- delete(tenant_id, conversation_id)
- Primary key:
-
MessageRepository
- Primary key:
/{tenant_id}/messages/{message_id} - Index:
/{tenant_id}/messages_by_conversation/{conversation_id} - create(message)
- get_by_id(tenant_id, message_id)
- list_by_conversation(tenant_id, conversation_id, offset, limit)
- delete(tenant_id, message_id)
- count_tokens(tenant_id, conversation_id)
- Primary key:
-
AuditRepository
- Primary key:
/{tenant_id}/audit/{audit_id} - Index:
/{tenant_id}/audit_by_user/{user_id} - Index:
/{tenant_id}/audit_by_event/{event_type} - Index:
/{tenant_id}/audit_by_date/{YYYY-MM-DD} - create(audit_event)
- get_by_id(tenant_id, audit_id)
- list_by_user(tenant_id, user_id, start_date, end_date)
- list_by_event(tenant_id, event_type, start_date, end_date)
- cleanup_old_events(retention_days)
- Primary key:
-
FileRepository
- Primary key:
/{tenant_id}/files/{file_id} - Index:
/{tenant_id}/files_by_session/{session_id} - Index:
/{tenant_id}/files_by_path/{workspace_path}/{file_path} - create(file)
- get_by_id(tenant_id, file_id)
- get_by_path(tenant_id, workspace_session_id, file_path)
- list_by_session(tenant_id, session_id)
- update(file)
- soft_delete(tenant_id, file_id)
- cleanup_deleted(days)
- Primary key:
-
AgentRepository
- Primary key:
/{tenant_id}/agents/{agent_id} - Index:
/{tenant_id}/agents_by_type/{agent_type} - create(agent)
- get_by_id(tenant_id, agent_id)
- list_by_tenant(tenant_id)
- list_by_type(tenant_id, agent_type)
- update(agent)
- delete(tenant_id, agent_id)
- Primary key:
-
SettingRepository
- Primary key:
/{tenant_id}/settings/{user_id}/{category}/{key} - Index:
/{tenant_id}/settings_by_user/{user_id} - Index:
/{tenant_id}/settings_by_category/{category} - set(tenant_id, user_id, category, key, value)
- get(tenant_id, user_id, category, key)
- get_all(tenant_id, user_id)
- delete(tenant_id, user_id, category, key)
- Primary key:
3. Testing & Integration
- Unit tests for all Phase 2 models
- Unit tests for all Phase 2 repositories
- Integration test: Conversation + Message linking
- Integration test: Audit event creation
- Integration test: File metadata tracking
- Integration test: Agent configuration storage
- Integration test: User settings persistence
- End-to-end test: Complete user workflow
🚀 PHASE 3: BACKEND API INTEGRATION
1. HTTP Handlers
-
Auth Handlers
- POST /api/v5/auth/register - create user + tenant
- POST /api/v5/auth/login - create auth session
- POST /api/v5/auth/refresh - rotate tokens
- POST /api/v5/auth/logout - invalidate token family
-
Session Handlers
- POST /api/v5/sessions - create workspace session
- GET /api/v5/sessions - list user sessions
- GET /api/v5/sessions/:id - get session details
- PUT /api/v5/sessions/:id - update session state
- DELETE /api/v5/sessions/:id - delete session
- POST /api/v5/sessions/:id/fork - fork session
- GET /api/v5/sessions/related - cross-session queries
-
Conversation Handlers
- POST /api/v5/conversations - create conversation
- GET /api/v5/conversations/:id - get conversation + messages
- POST /api/v5/conversations/:id/messages - add message
- GET /api/v5/conversations/:id/messages - paginate messages
-
User Handlers
- GET /api/v5/users/me - get current user
- PUT /api/v5/users/me - update profile
- PUT /api/v5/users/me/password - change password
-
Settings Handlers
- GET /api/v5/settings - get all user settings
- PUT /api/v5/settings/:category/:key - update setting
- DELETE /api/v5/settings/:category/:key - delete setting
2. Middleware
- JWT authentication middleware
- Tenant isolation middleware
- Rate limiting middleware
- Audit logging middleware
3. Frontend Integration
- Update session-service.ts to use new API
- Update user-service.ts for auth
- Update llm-service.ts for conversation tracking
- Update file-service.ts for file metadata
- Add settings-service.ts for user preferences
📊 PROGRESS TRACKING
Phase 1 Status
- Models: ✅ 4/4 complete (100%)
- Repositories: ✅ 5/5 complete (100%)
- Tests: ⏳ 0/7 complete (0%)
- Overall: ✅ 67% complete
Phase 2 Status
- Models: ✅ 6/6 complete (100%)
- Repositories: ✅ 6/6 complete (100%)
- Tests: ⏳ 0/7 complete (0%)
- Overall: ✅ 67% complete
Phase 3 Status
- Handlers: ⏳ 0/18 complete (0%)
- Middleware: ⏳ 0/4 complete (0%)
- Frontend: ⏳ 0/5 complete (0%)
- Overall: ⏳ 0% complete
Total Progress
- Items Complete: 28/128 (21.9%)
- Current Phase: Phase 2 Complete! 🎉
- Next Milestone: Phase 3 - Backend API Integration (27 items)
🎯 ESTIMATED TIMELINE
Phase 1: Core Foundation
- Models: ✅ DONE (1 day)
- Repositories: 2-3 days
- Tests: 1-2 days
- Total: ~1 week
Phase 2: Intelligence Layer
- Models: 1 day
- Repositories: 3-4 days
- Tests: 2 days
- Total: ~1 week
Phase 3: API Integration
- Handlers: 3-4 days
- Middleware: 1 day
- Frontend: 2-3 days
- Total: ~1 week
Overall Timeline
- Solo Developer: ~3 weeks
- 2-Person Team: ~2 weeks
- 4-Person Team: ~10 days
📝 NOTES
Key Dependencies:
- Phase 2 depends on Phase 1 repositories
- Phase 3 depends on Phase 2 repositories
- Frontend integration depends on API handlers
Critical Path:
- Phase 1 repositories (blocking everything)
- Phase 2 repositories (blocking API)
- API handlers (blocking frontend)
- Frontend integration (final step)
Next Steps:
- ✅ Complete Phase 1 models
- ✅ Implement base FdbRepository trait
- ✅ Implement 5 Phase 1 repositories
- ✅ Complete Phase 2 models
- ✅ Implement 6 Phase 2 repositories
- ⏳ Write tests for Phase 1 & 2
- ⏳ Start Phase 3 - Backend API Integration
Last Updated: 2025-10-14 Status: ✅ Phase 1 & 2 Complete - 10 Models, 10 Repositories, 2,860 Lines