- 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
191 lines
8.2 KiB
Python
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] |