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": "hermes_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]