implementation_plan.md 5.5 KB

Implementation Plan - AuraK External API Service (v2.0)

Provide an API service for external systems to access the KnowledgeBase functionalities, including chat, search, and document management.

User Review Required

[!IMPORTANT] Multi-Tenancy & Resource Sharing:

  • Tenant Entity: We will introduce a Tenant (Organization) entity.
  • Resource Scoping: User, KnowledgeBase, KnowledgeGroup, SearchHistory, Note, and ImportTask will be scoped by tenantId.
  • Configuration Hierarchy:
    • ModelConfig: Inherited hierarchy: System Models (Global) -> Tenant Models (Shared in Org) -> User Models (Private).
    • TenantSettings: New entity to define organization-wide defaults (Language, Default Models, Search thresholds). UserSetting can still override these for personalization.
  • Data Migration: Existing data will be migrated to a "Default Tenant" during the first run.
  • Elasticsearch Isolation: The tenantId field will be added to the ES mapping and enforced in all search/delete queries.
  • Storage Partitioning: Uploaded files will be stored in uploads/{tenantId}/{fileId} to isolate files at the filesystem level.
  • API Key: Tied to User, scoped by Tenant.

[!IMPORTANT] RBAC & Interface Separation:

  • Roles:
    • SUPER_ADMIN: Manage Tenants and global system settings.
    • TENANT_ADMIN: Manage Users and Knowledge Bases within their Tenant.
    • USER: Access Chat, Search, and Knowledge Base within their Tenant.
  • API Separation: Administrative endpoints will be separated into /api/v1/super-admin/* and /api/v1/admin/*.
  • UI Separation: Recommend separating the "Admin Portal" from the "User Workspace" to ensure a cleaner user experience and better security boundaries.

[!IMPORTANT] Frontend Modernization (Google Workspace Style):

  • Design Aesthetic: Adopt a clean, modern, and professional style inspired by Google Workspace (Gmail, Drive, Gemini).
  • Core Elements:
    • Sleek Navigation Rail: A minimal, collapsible sidebar with rounded active states.
    • Top Global Search: A prominent, rounded search bar for quick access.
    • Airy Layout: Increased white space and soft shadows to improve readability.
    • Gemini-like Chat: A modern AI chat interface with clean message bubbles and a refined input area.
  • Mockup: Google Workspace Style Mockup

Proposed Changes

[Component] Database Schema

[NEW] tenant.entity.ts

  • Define Tenant entity with id and name.

[MODIFY] user.entity.ts

  • Add tenantId column (ManyToOne relationship with Tenant).
  • Add role column (Enum: SUPER_ADMIN, TENANT_ADMIN, USER).
  • Add apiKey column for API authentication.

[NEW] tenant-setting.entity.ts

  • Store organization-wide defaults (similar fields to UserSetting).

[MODIFY] model-config.entity.ts

  • Add tenantId column (nullable for global models).
  • Update lookup logic to include system-level and tenant-level models.

[MODIFY] knowledge-base.entity.ts

  • Add tenantId column.

[MODIFY] knowledge-group.entity.ts

  • Add tenantId column.

[MODIFY] search-history.entity.ts

  • Add tenantId column.

[MODIFY] note.entity.ts

  • Add tenantId column.

[Component] Infrastructure & Storage

[MODIFY] elasticsearch.service.ts

  • Update createIndex mapping to include tenantId as a keyword field.
  • Modify searchSimilar, searchFullText, and hybridSearch to include term: { tenantId } filter.

[MODIFY] knowledge-base.service.ts

  • Update file storage logic to use uploads/{tenantId}/{fileId} path.

[NEW] [migrations]

  • Create a migration script to:
    1. Create the Tenant table.
    2. Create a "Default" tenant.
    3. Update all existing records to link to the "Default" tenant.

[Component] User & Auth

[NEW] super-admin.guard.ts

  • Guard that checks for SUPER_ADMIN role.

[NEW] tenant-admin.guard.ts

  • Guard that checks for TENANT_ADMIN role or higher within the same tenant.

Verification Plan

Automated Tests

  • curl -X GET http://localhost:3001/api/v1/knowledge-bases -H "x-api-key: YOUR_KEY"
  • curl -X POST http://localhost:3001/api/v1/chat -H "x-api-key: YOUR_KEY" -d '{"message": "Hello"}'

Manual Verification

  1. Retrieve API Key: Login to the system, then call /api/user/api-key to get the key.
  2. Test External Request: Use the retrieved key to call the new /api/v1/* endpoints.
  3. Check Swagger: Visit http://localhost:3001/api/docs.
  4. Verify Streaming: Ensure POST /api/v1/chat with stream: true returns SSE chunks.