""" 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 # NOTE: The orgid field is automatically populated by the backend layer: # - In .dspy files, orgid is obtained via `orgid = await get_userorgid()` # - The orgid is passed from .dspy to Python functions (create_service, delete_service, etc.) # - SQL templates use orgid for all WHERE clauses (data isolation by organization) # - orgid is EXCLUDED from UI: hidden in both list view (browserfields.exclouded) # and edit form (editexclouded), users never see or edit this field # - logined_userorgid param in CRUD definition enables framework-level org filtering 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]