- Add orgid field (str32, not nullable) to hermes_services table - Replace user_id with orgid in all service CRUD operations (SQL + functions) - Update function signatures: get_all_services, create_service, delete_service, get_service_by_id, test_service_connection, create_session, send_message_to_service, get_session_messages all use orgid - Add orgid indexes: idx_hermes_services_orgid, idx_hermes_services_orgid_status - Add logined_userorgid filtering to CRUD definition for automatic framework-level isolation - Update all .dspy files to use get_userorgid() for org-scoped service queries - Update init/data.json and db_tables.py to reflect orgid field
241 lines
7.0 KiB
Python
241 lines
7.0 KiB
Python
"""
|
|
Database table definitions for hermes-web-cli module.
|
|
Follows database-table-definition-spec: summary/fields/indexes/codes four-section format.
|
|
"""
|
|
|
|
# Services table definition
|
|
SERVICES_TABLE = {
|
|
"summary": {
|
|
"name": "services",
|
|
"description": "Stores Hermes service configurations for each organization",
|
|
"module": "hermes-web-cli"
|
|
},
|
|
"fields": [
|
|
{
|
|
"name": "id",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"primary_key": True,
|
|
"description": "Unique service identifier (UUID)"
|
|
},
|
|
{
|
|
"name": "orgid",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"description": "Organization ID that owns this service"
|
|
},
|
|
{
|
|
"name": "name",
|
|
"type": "varchar(255)",
|
|
"nullable": False,
|
|
"description": "Service display name"
|
|
},
|
|
{
|
|
"name": "service_url",
|
|
"type": "varchar(512)",
|
|
"nullable": False,
|
|
"description": "Base URL of the Hermes service endpoint"
|
|
},
|
|
{
|
|
"name": "description",
|
|
"type": "text",
|
|
"nullable": True,
|
|
"description": "Optional service description"
|
|
},
|
|
{
|
|
"name": "apikey",
|
|
"type": "varchar(512)",
|
|
"nullable": True,
|
|
"default": "''",
|
|
"description": "API key for service authentication (X-API-Key header)"
|
|
},
|
|
{
|
|
"name": "status",
|
|
"type": "varchar(20)",
|
|
"nullable": False,
|
|
"default": "'active'",
|
|
"description": "Service status: active, inactive, error"
|
|
},
|
|
{
|
|
"name": "created_at",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Record creation timestamp"
|
|
},
|
|
{
|
|
"name": "updated_at",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Record last update timestamp"
|
|
}
|
|
],
|
|
"indexes": [
|
|
{
|
|
"name": "idx_services_orgid",
|
|
"fields": ["orgid"],
|
|
"unique": False,
|
|
"description": "Index for org-based queries"
|
|
},
|
|
{
|
|
"name": "idx_services_status",
|
|
"fields": ["status"],
|
|
"unique": False,
|
|
"description": "Index for status-based queries"
|
|
},
|
|
{
|
|
"name": "idx_services_orgid_status",
|
|
"fields": ["orgid", "status"],
|
|
"unique": False,
|
|
"description": "Composite index for org and status queries"
|
|
}
|
|
],
|
|
"codes": []
|
|
}
|
|
|
|
# Sessions table definition
|
|
SESSIONS_TABLE = {
|
|
"summary": {
|
|
"name": "sessions",
|
|
"description": "Stores user session information and metadata",
|
|
"module": "hermes-web-cli"
|
|
},
|
|
"fields": [
|
|
{
|
|
"name": "session_id",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"primary_key": True,
|
|
"description": "Unique session identifier (UUID)"
|
|
},
|
|
{
|
|
"name": "user_id",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"description": "Owner user ID for multi-user isolation"
|
|
},
|
|
{
|
|
"name": "service_id",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"description": "Associated service ID"
|
|
},
|
|
{
|
|
"name": "session_name",
|
|
"type": "varchar(255)",
|
|
"nullable": True,
|
|
"description": "Optional session display name"
|
|
},
|
|
{
|
|
"name": "service_name",
|
|
"type": "varchar(255)",
|
|
"nullable": False,
|
|
"description": "Name of the associated service at session creation"
|
|
},
|
|
{
|
|
"name": "status",
|
|
"type": "varchar(20)",
|
|
"nullable": False,
|
|
"default": "'active'",
|
|
"description": "Session status: active, archived, deleted"
|
|
},
|
|
{
|
|
"name": "created_at",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Session creation timestamp"
|
|
},
|
|
{
|
|
"name": "last_active",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Last activity timestamp"
|
|
},
|
|
{
|
|
"name": "message_count",
|
|
"type": "integer",
|
|
"nullable": False,
|
|
"default": "0",
|
|
"description": "Total message count in session"
|
|
}
|
|
],
|
|
"indexes": [
|
|
{
|
|
"name": "idx_sessions_user_id",
|
|
"fields": ["user_id"],
|
|
"unique": False,
|
|
"description": "Index for user-based session queries"
|
|
},
|
|
{
|
|
"name": "idx_sessions_service_id",
|
|
"fields": ["service_id"],
|
|
"unique": False,
|
|
"description": "Index for service-based session queries"
|
|
},
|
|
{
|
|
"name": "idx_sessions_status",
|
|
"fields": ["status"],
|
|
"unique": False,
|
|
"description": "Index for status-based session queries"
|
|
},
|
|
{
|
|
"name": "idx_sessions_user_status",
|
|
"fields": ["user_id", "status"],
|
|
"unique": False,
|
|
"description": "Composite index for user and status session queries"
|
|
},
|
|
{
|
|
"name": "idx_sessions_last_active",
|
|
"fields": ["last_active"],
|
|
"unique": False,
|
|
"description": "Index for recent activity queries"
|
|
}
|
|
],
|
|
"codes": []
|
|
}
|
|
|
|
# Settings table definition
|
|
SETTINGS_TABLE = {
|
|
"summary": {
|
|
"name": "settings",
|
|
"description": "Stores user-specific configuration settings",
|
|
"module": "hermes-web-cli"
|
|
},
|
|
"fields": [
|
|
{
|
|
"name": "user_id",
|
|
"type": "varchar(64)",
|
|
"nullable": False,
|
|
"primary_key": True,
|
|
"description": "User ID as primary key for user settings"
|
|
},
|
|
{
|
|
"name": "settings_json",
|
|
"type": "text",
|
|
"nullable": False,
|
|
"description": "JSON string containing all user settings"
|
|
},
|
|
{
|
|
"name": "created_at",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Record creation timestamp"
|
|
},
|
|
{
|
|
"name": "updated_at",
|
|
"type": "timestamp",
|
|
"nullable": False,
|
|
"default": "CURRENT_TIMESTAMP",
|
|
"description": "Record last update timestamp"
|
|
}
|
|
],
|
|
"indexes": [],
|
|
"codes": []
|
|
}
|
|
|
|
# Table definitions list for module initialization
|
|
TABLE_DEFINITIONS = [SERVICES_TABLE, SESSIONS_TABLE, SETTINGS_TABLE] |