yumoqing 0e0ee695e6 feat: add orgid field to hermes_services for organization-scoped service isolation
- 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
2026-04-27 11:50:05 +08:00

191 lines
8.2 KiB
Python

"""
CRUD operations definitions for hermes-web-cli module.
Follows crud-definition-spec standard.
"""
from typing import Dict, List, Optional
from datetime import datetime
# Services CRUD operations
SERVICES_CRUD = {
"module": "hermes-web-cli",
"table": "services",
"operations": {
"create": {
"name": "create_service_record",
"description": "Create a new service record for the current organization",
"parameters": ["orgid", "name", "service_url", "description", "apikey"],
"sql_template": """
INSERT INTO services (id, orgid, name, service_url, description, apikey, status, created_at, updated_at)
VALUES (${id}$, ${orgid}$, ${name}$, ${service_url}$, ${description}$, ${apikey}$, ${status}$, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
""",
"return_fields": ["id"]
},
"read_all": {
"name": "get_all_services_for_org",
"description": "Get all services for the current organization",
"parameters": ["orgid"],
"sql_template": """
SELECT id, orgid, name, service_url, description, apikey, status,
created_at, updated_at
FROM services
WHERE orgid = ${orgid}$
ORDER BY created_at DESC
""",
"return_fields": ["id", "orgid", "name", "service_url", "description", "apikey", "status", "created_at", "updated_at"]
},
"read_by_id": {
"name": "get_service_by_id_and_org",
"description": "Get a specific service by ID for the current organization",
"parameters": ["service_id", "orgid"],
"sql_template": """
SELECT id, orgid, name, service_url, description, apikey, status,
created_at, updated_at
FROM services
WHERE id = ${service_id}$ AND orgid = ${orgid}$
""",
"return_fields": ["id", "orgid", "name", "service_url", "description", "apikey", "status", "created_at", "updated_at"]
},
"update": {
"name": "update_service_record",
"description": "Update an existing service record",
"parameters": ["service_id", "orgid", "name", "service_url", "description", "apikey", "status"],
"sql_template": """
UPDATE services
SET name = ${name}$,
service_url = ${service_url}$,
description = ${description}$,
apikey = ${apikey}$,
status = ${status}$,
updated_at = CURRENT_TIMESTAMP
WHERE id = ${service_id}$ AND orgid = ${orgid}$
""",
"return_fields": []
},
"delete": {
"name": "delete_service_record",
"description": "Delete a service record for the current organization",
"parameters": ["service_id", "orgid"],
"sql_template": """
DELETE FROM services
WHERE id = ${service_id}$ AND orgid = ${orgid}$
""",
"return_fields": []
}
}
}
# Sessions CRUD operations
SESSIONS_CRUD = {
"module": "hermes-web-cli",
"table": "sessions",
"operations": {
"create": {
"name": "create_session_record",
"description": "Create a new session record",
"parameters": ["session_id", "user_id", "service_id", "session_name", "service_name"],
"sql_template": """
INSERT INTO sessions (session_id, user_id, service_id, session_name, service_name, status, created_at, last_active, message_count)
VALUES (${session_id}$, ${user_id}$, ${service_id}$, ${session_name}$, ${service_name}$, 'active', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0)
""",
"return_fields": ["session_id"]
},
"read_active": {
"name": "get_active_sessions_for_user",
"description": "Get all active sessions for the current user",
"parameters": ["user_id"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE user_id = ${user_id}$ AND status = 'active'
ORDER BY last_active DESC
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"read_recent": {
"name": "get_recent_sessions_for_user",
"description": "Get recent sessions (active and archived) for the current user",
"parameters": ["user_id", "limit"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE user_id = ${user_id}$
ORDER BY last_active DESC
LIMIT ${limit}$
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"read_by_id": {
"name": "get_session_by_id_and_user",
"description": "Get a specific session by ID for the current user",
"parameters": ["session_id", "user_id"],
"sql_template": """
SELECT session_id, user_id, service_id, session_name, service_name, status,
created_at, last_active, message_count
FROM sessions
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": ["session_id", "user_id", "service_id", "session_name", "service_name", "status", "created_at", "last_active", "message_count"]
},
"update_last_active": {
"name": "update_session_last_active",
"description": "Update session last_active timestamp and message count",
"parameters": ["session_id", "user_id", "message_count"],
"sql_template": """
UPDATE sessions
SET last_active = CURRENT_TIMESTAMP,
message_count = ${message_count}$
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
},
"archive": {
"name": "archive_session",
"description": "Archive a session (change status to archived)",
"parameters": ["session_id", "user_id"],
"sql_template": """
UPDATE sessions
SET status = 'archived',
updated_at = CURRENT_TIMESTAMP
WHERE session_id = ${session_id}$ AND user_id = ${user_id}$
""",
"return_fields": []
}
}
}
# Settings CRUD operations
SETTINGS_CRUD = {
"module": "hermes-web-cli",
"table": "settings",
"operations": {
"create_or_update": {
"name": "save_user_settings",
"description": "Create or update user settings",
"parameters": ["user_id", "settings_json"],
"sql_template": """
INSERT INTO settings (user_id, settings_json, created_at, updated_at)
VALUES (${user_id}$, ${settings_json}$, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
ON CONFLICT (user_id)
DO UPDATE SET settings_json = ${settings_json}$, updated_at = CURRENT_TIMESTAMP
""",
"return_fields": []
},
"read": {
"name": "get_user_settings",
"description": "Get user settings by user_id",
"parameters": ["user_id"],
"sql_template": """
SELECT settings_json, created_at, updated_at
FROM settings
WHERE user_id = ${user_id}$
""",
"return_fields": ["settings_json", "created_at", "updated_at"]
}
}
}
# CRUD definitions list
CRUD_DEFINITIONS = [SERVICES_CRUD, SESSIONS_CRUD, SETTINGS_CRUD]