From 796df405b4163574d28ff049e36787d5e8bf0aa6 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 24 Jul 2026 13:35:13 +0800 Subject: [PATCH] fix: move CRUD json to json/, keep models/ for DB defs --- documents.json => json/documents.json | 0 .../engine_configs.json | 0 .../knowledge_bases.json | 0 subscriptions.json => json/subscriptions.json | 0 tags.json => json/tags.json | 0 models/document_chunks.json | 30 ---------- models/documents.json | 56 +++++++----------- models/engine_configs.json | 55 ++++++++---------- models/entities.json | 35 ----------- models/entity_relations.json | 29 ---------- models/knowledge_bases.json | 52 ++++++++--------- models/media_tags.json | 28 --------- models/subscriptions.json | 58 +++++++++---------- models/tags.json | 40 ++++++------- models/usage_logs.json | 30 ---------- 15 files changed, 114 insertions(+), 299 deletions(-) rename documents.json => json/documents.json (100%) rename engine_configs.json => json/engine_configs.json (100%) rename knowledge_bases.json => json/knowledge_bases.json (100%) rename subscriptions.json => json/subscriptions.json (100%) rename tags.json => json/tags.json (100%) delete mode 100644 models/document_chunks.json delete mode 100644 models/entities.json delete mode 100644 models/entity_relations.json delete mode 100644 models/media_tags.json delete mode 100644 models/usage_logs.json diff --git a/documents.json b/json/documents.json similarity index 100% rename from documents.json rename to json/documents.json diff --git a/engine_configs.json b/json/engine_configs.json similarity index 100% rename from engine_configs.json rename to json/engine_configs.json diff --git a/knowledge_bases.json b/json/knowledge_bases.json similarity index 100% rename from knowledge_bases.json rename to json/knowledge_bases.json diff --git a/subscriptions.json b/json/subscriptions.json similarity index 100% rename from subscriptions.json rename to json/subscriptions.json diff --git a/tags.json b/json/tags.json similarity index 100% rename from tags.json rename to json/tags.json diff --git a/models/document_chunks.json b/models/document_chunks.json deleted file mode 100644 index c545831..0000000 --- a/models/document_chunks.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "summary": [ - { - "name": "document_chunks", - "title": "文档分片", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "doc_id", "title": "文档ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "chunk_index", "title": "分片序号", "type": "int", "default": 0}, - {"name": "chunk_type", "title": "分片类型", "type": "str", "length": 32}, - {"name": "content", "title": "文本内容", "type": "text", "length": 65535}, - {"name": "description", "title": "描述", "type": "text", "length": 65535}, - {"name": "vector_id", "title": "向量库ID", "type": "str", "length": 128}, - {"name": "start_offset", "title": "起始偏移", "type": "int", "default": 0}, - {"name": "end_offset", "title": "结束偏移", "type": "int", "default": 0}, - {"name": "time_start", "title": "时间起始(秒)", "type": "float", "length": 10, "dec": 3}, - {"name": "time_end", "title": "时间结束(秒)", "type": "float", "length": 10, "dec": 3}, - {"name": "metadata", "title": "元数据JSON", "type": "text", "length": 2000}, - {"name": "created_at", "title": "创建时间", "type": "datetime"} - ], - "indexes": [ - {"name": "idx_chunk_doc", "idxtype": "index", "idxfields": ["doc_id"]}, - {"name": "idx_chunk_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_chunk_vector", "idxtype": "index", "idxfields": ["vector_id"]} - ] -} diff --git a/models/documents.json b/models/documents.json index ff04880..937f7d1 100644 --- a/models/documents.json +++ b/models/documents.json @@ -1,37 +1,25 @@ { - "summary": [ - { - "name": "documents", - "title": "文档", - "primary": ["id"] + "tblname": "documents", + "params": { + "title": "文档管理", + "browserfields": [ + {"field": "file_name", "title": "文件名", "width": "25%"}, + {"field": "file_type", "title": "类型", "width": "10%"}, + {"field": "file_size", "title": "大小", "width": "10%"}, + {"field": "chunk_count", "title": "分片数", "width": "8%"}, + {"field": "status", "title": "状态", "width": "10%"}, + {"field": "kb_id", "title": "知识库", "width": "17%"}, + {"field": "created_at", "title": "上传时间", "width": "20%"} + ], + "editfields": [ + {"field": "file_name", "uitype": "Text", "required": true}, + {"field": "kb_id", "uitype": "Text", "required": true}, + {"field": "file_type", "uitype": "Text"} + ], + "searchfields": ["file_name"], + "sort": "created_at desc", + "data_filter": { + "org_id": "{{userorgid}}" } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "file_name", "title": "文件名", "type": "str", "length": 255}, - {"name": "file_type", "title": "文件类型", "type": "str", "length": 32}, - {"name": "file_size", "title": "文件大小", "type": "int", "default": 0}, - {"name": "file_path", "title": "文件路径", "type": "str", "length": 500}, - {"name": "mime_type", "title": "MIME类型", "type": "str", "length": 128}, - {"name": "chunk_count", "title": "分片数", "type": "int", "default": 0}, - {"name": "embed_dim", "title": "向量维度", "type": "int", "default": 1024}, - {"name": "metadata", "title": "元数据JSON", "type": "text", "length": 4000}, - {"name": "status", "title": "状态", "type": "str", "length": 16, "default": "pending"}, - {"name": "error_msg", "title": "错误信息", "type": "text", "length": 2000}, - {"name": "org_id", "title": "所属机构", "type": "str", "length": 32}, - {"name": "created_by", "title": "创建人", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"}, - {"name": "updated_at", "title": "更新时间", "type": "datetime"} - ], - "codes": [ - {"field": "file_type", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='file_type'"}, - {"field": "status", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='doc_status'"}, - {"field": "kb_id", "table": "knowledge_bases", "valuefield": "id", "textfield": "name"} - ], - "indexes": [ - {"name": "idx_doc_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_doc_org", "idxtype": "index", "idxfields": ["org_id"]}, - {"name": "idx_doc_status", "idxtype": "index", "idxfields": ["status"]} - ] + } } diff --git a/models/engine_configs.json b/models/engine_configs.json index be5dfe7..c338fb2 100644 --- a/models/engine_configs.json +++ b/models/engine_configs.json @@ -1,33 +1,26 @@ { - "summary": [ - { - "name": "engine_configs", - "title": "引擎配置", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "org_id", "title": "机构ID", "type": "str", "length": 32, "nullable": "yes"}, - {"name": "engine_type", "title": "引擎类型", "type": "str", "length": 32}, - {"name": "engine_name", "title": "引擎名称", "type": "str", "length": 64}, - {"name": "endpoint_url", "title": "服务地址", "type": "str", "length": 255}, - {"name": "api_key", "title": "API密钥", "type": "str", "length": 255}, - {"name": "model_name", "title": "模型名称", "type": "str", "length": 128}, - {"name": "config_json", "title": "扩展配置JSON", "type": "text", "length": 4000}, - {"name": "is_default", "title": "是否默认", "type": "int", "default": 0}, - {"name": "priority", "title": "优先级", "type": "int", "default": 0}, - {"name": "status", "title": "状态", "type": "str", "length": 16, "default": "active"}, - {"name": "health_check_at", "title": "最近健康检查", "type": "datetime"}, - {"name": "created_at", "title": "创建时间", "type": "datetime"}, - {"name": "updated_at", "title": "更新时间", "type": "datetime"} - ], - "codes": [ - {"field": "engine_type", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='engine_type'"}, - {"field": "status", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='engine_status'"} - ], - "indexes": [ - {"name": "idx_eng_type", "idxtype": "index", "idxfields": ["engine_type", "is_default"]}, - {"name": "idx_eng_org", "idxtype": "index", "idxfields": ["org_id", "engine_type"]} - ] + "tblname": "engine_configs", + "params": { + "title": "引擎配置", + "browserfields": [ + {"field": "engine_type", "title": "引擎类型", "width": "15%"}, + {"field": "engine_name", "title": "名称", "width": "15%"}, + {"field": "endpoint_url", "title": "服务地址", "width": "25%"}, + {"field": "model_name", "title": "模型", "width": "15%"}, + {"field": "is_default", "title": "默认", "width": "8%"}, + {"field": "status", "title": "状态", "width": "10%"}, + {"field": "org_id", "title": "机构", "width": "12%"} + ], + "editfields": [ + {"field": "engine_type", "uitype": "Text", "required": true}, + {"field": "engine_name", "uitype": "Text", "required": true}, + {"field": "endpoint_url", "uitype": "Text"}, + {"field": "api_key", "uitype": "Text"}, + {"field": "model_name", "uitype": "Text"}, + {"field": "is_default", "uitype": "Text"}, + {"field": "config_json", "uitype": "Text"} + ], + "searchfields": ["engine_type", "engine_name", "endpoint_url"], + "sort": "engine_type, priority desc" + } } diff --git a/models/entities.json b/models/entities.json deleted file mode 100644 index 68b896a..0000000 --- a/models/entities.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "summary": [ - { - "name": "entities", - "title": "实体", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "name", "title": "实体名", "type": "str", "length": 255}, - {"name": "entity_type", "title": "实体类型", "type": "str", "length": 64}, - {"name": "description", "title": "描述", "type": "text", "length": 2000}, - {"name": "graph_node_id", "title": "图节点ID", "type": "str", "length": 128}, - {"name": "source_doc_ids", "title": "来源文档ID列表", "type": "text", "length": 2000}, - {"name": "face_embedding_id", "title": "人脸特征ID", "type": "str", "length": 128}, - {"name": "voice_embedding_id", "title": "声纹特征ID", "type": "str", "length": 128}, - {"name": "metadata", "title": "元数据JSON", "type": "text", "length": 2000}, - {"name": "org_id", "title": "所属机构", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"}, - {"name": "updated_at", "title": "更新时间", "type": "datetime"} - ], - "codes": [ - {"field": "entity_type", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='entity_type'"}, - {"field": "kb_id", "table": "knowledge_bases", "valuefield": "id", "textfield": "name"} - ], - "indexes": [ - {"name": "idx_entity_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_entity_name", "idxtype": "index", "idxfields": ["kb_id", "name"]}, - {"name": "idx_entity_type", "idxtype": "index", "idxfields": ["kb_id", "entity_type"]}, - {"name": "idx_entity_face", "idxtype": "index", "idxfields": ["face_embedding_id"]}, - {"name": "idx_entity_voice", "idxtype": "index", "idxfields": ["voice_embedding_id"]} - ] -} diff --git a/models/entity_relations.json b/models/entity_relations.json deleted file mode 100644 index 243b31e..0000000 --- a/models/entity_relations.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "summary": [ - { - "name": "entity_relations", - "title": "实体关系", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "subject_id", "title": "主体实体ID", "type": "str", "length": 32}, - {"name": "object_id", "title": "客体实体ID", "type": "str", "length": 32}, - {"name": "relation_type", "title": "关系类型", "type": "str", "length": 64}, - {"name": "description", "title": "关系描述", "type": "text", "length": 2000}, - {"name": "graph_edge_id", "title": "图边ID", "type": "str", "length": 128}, - {"name": "source_chunk_ids", "title": "来源分片ID列表", "type": "text", "length": 2000}, - {"name": "org_id", "title": "所属机构", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"} - ], - "codes": [ - {"field": "kb_id", "table": "knowledge_bases", "valuefield": "id", "textfield": "name"} - ], - "indexes": [ - {"name": "idx_rel_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_rel_subject", "idxtype": "index", "idxfields": ["subject_id"]}, - {"name": "idx_rel_object", "idxtype": "index", "idxfields": ["object_id"]} - ] -} diff --git a/models/knowledge_bases.json b/models/knowledge_bases.json index 0ea0967..99482d5 100644 --- a/models/knowledge_bases.json +++ b/models/knowledge_bases.json @@ -1,32 +1,26 @@ { - "summary": [ - { - "name": "knowledge_bases", - "title": "知识库", - "primary": ["id"] + "tblname": "knowledge_bases", + "params": { + "title": "知识库管理", + "browserfields": [ + {"field": "name", "title": "名称", "width": "20%"}, + {"field": "description", "title": "描述", "width": "30%"}, + {"field": "doc_count", "title": "文档数", "width": "10%"}, + {"field": "total_size", "title": "大小", "width": "10%"}, + {"field": "embedding_engine", "title": "向量引擎", "width": "15%"}, + {"field": "created_at", "title": "创建时间", "width": "15%"} + ], + "editfields": [ + {"field": "name", "uitype": "Text", "required": true}, + {"field": "description", "uitype": "Text"}, + {"field": "embedding_engine", "uitype": "Text", "default": "clip-vith14"}, + {"field": "vdb_collection", "uitype": "Text"}, + {"field": "graph_name", "uitype": "Text"} + ], + "searchfields": ["name", "description"], + "sort": "created_at desc", + "data_filter": { + "org_id": "{{userorgid}}" } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "name", "title": "名称", "type": "str", "length": 100}, - {"name": "description", "title": "描述", "type": "text", "length": 2000}, - {"name": "org_id", "title": "所属机构", "type": "str", "length": 32}, - {"name": "embedding_engine", "title": "向量化引擎", "type": "str", "length": 64, "default": "clip-vith14"}, - {"name": "vdb_collection", "title": "向量库集合名", "type": "str", "length": 128}, - {"name": "graph_name", "title": "图名称", "type": "str", "length": 128}, - {"name": "doc_count", "title": "文档数", "type": "int", "default": 0}, - {"name": "chunk_count", "title": "分片数", "type": "int", "default": 0}, - {"name": "total_size", "title": "总大小(字节)", "type": "int", "default": 0}, - {"name": "status", "title": "状态", "type": "str", "length": 16, "default": "active"}, - {"name": "created_by", "title": "创建人", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"}, - {"name": "updated_at", "title": "更新时间", "type": "datetime"} - ], - "codes": [ - {"field": "status", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='kb_status'"} - ], - "indexes": [ - {"name": "idx_kb_org", "idxtype": "index", "idxfields": ["org_id"]}, - {"name": "idx_kb_name", "idxtype": "unique", "idxfields": ["org_id", "name"]} - ] + } } diff --git a/models/media_tags.json b/models/media_tags.json deleted file mode 100644 index 1e34090..0000000 --- a/models/media_tags.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "summary": [ - { - "name": "media_tags", - "title": "媒体标签关联", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "media_type", "title": "媒体类型", "type": "str", "length": 32}, - {"name": "media_id", "title": "媒体ID", "type": "str", "length": 32}, - {"name": "tag_id", "title": "标签ID", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"} - ], - "codes": [ - {"field": "media_type", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='media_type'"}, - {"field": "tag_id", "table": "tags", "valuefield": "id", "textfield": "name"}, - {"field": "kb_id", "table": "knowledge_bases", "valuefield": "id", "textfield": "name"} - ], - "indexes": [ - {"name": "idx_mt_media", "idxtype": "index", "idxfields": ["media_type", "media_id"]}, - {"name": "idx_mt_tag", "idxtype": "index", "idxfields": ["tag_id"]}, - {"name": "idx_mt_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_mt_unique", "idxtype": "unique", "idxfields": ["media_type", "media_id", "tag_id"]} - ] -} diff --git a/models/subscriptions.json b/models/subscriptions.json index bec6ac9..53f7ae5 100644 --- a/models/subscriptions.json +++ b/models/subscriptions.json @@ -1,34 +1,28 @@ { - "summary": [ - { - "name": "subscriptions", - "title": "租户订阅", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "org_id", "title": "机构ID", "type": "str", "length": 32}, - {"name": "plan_name", "title": "套餐名称", "type": "str", "length": 64}, - {"name": "disk_quota_bytes", "title": "磁盘配额(字节)", "type": "int", "default": 1073741824}, - {"name": "disk_used_bytes", "title": "已用磁盘(字节)", "type": "int", "default": 0}, - {"name": "doc_quota", "title": "文档数配额", "type": "int", "default": 1000}, - {"name": "doc_used", "title": "已用文档数", "type": "int", "default": 0}, - {"name": "kb_quota", "title": "知识库数配额", "type": "int", "default": 10}, - {"name": "kb_used", "title": "已用知识库数", "type": "int", "default": 0}, - {"name": "api_call_quota", "title": "API调用配额(月)", "type": "int", "default": 10000}, - {"name": "api_call_used", "title": "已用API调用(月)", "type": "int", "default": 0}, - {"name": "start_date", "title": "开始日期", "type": "date"}, - {"name": "end_date", "title": "结束日期", "type": "date"}, - {"name": "status", "title": "状态", "type": "str", "length": 16, "default": "active"}, - {"name": "created_at", "title": "创建时间", "type": "datetime"}, - {"name": "updated_at", "title": "更新时间", "type": "datetime"} - ], - "codes": [ - {"field": "status", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='sub_status'"} - ], - "indexes": [ - {"name": "idx_sub_org", "idxtype": "unique", "idxfields": ["org_id"]}, - {"name": "idx_sub_status", "idxtype": "index", "idxfields": ["status"]} - ] + "tblname": "subscriptions", + "params": { + "title": "订阅管理", + "browserfields": [ + {"field": "org_id", "title": "机构", "width": "15%"}, + {"field": "plan_name", "title": "套餐", "width": "15%"}, + {"field": "disk_quota_bytes", "title": "磁盘配额", "width": "12%"}, + {"field": "disk_used_bytes", "title": "已用磁盘", "width": "12%"}, + {"field": "doc_used", "title": "文档数", "width": "10%"}, + {"field": "start_date", "title": "开始", "width": "12%"}, + {"field": "end_date", "title": "结束", "width": "12%"}, + {"field": "status", "title": "状态", "width": "12%"} + ], + "editfields": [ + {"field": "org_id", "uitype": "Text", "required": true}, + {"field": "plan_name", "uitype": "Text", "required": true}, + {"field": "disk_quota_bytes", "uitype": "Text", "default": "1073741824"}, + {"field": "doc_quota", "uitype": "Text"}, + {"field": "kb_quota", "uitype": "Text"}, + {"field": "api_call_quota", "uitype": "Text"}, + {"field": "start_date", "uitype": "Text"}, + {"field": "end_date", "uitype": "Text"} + ], + "searchfields": ["org_id", "plan_name"], + "sort": "created_at desc" + } } diff --git a/models/tags.json b/models/tags.json index 3953f1b..acdf5dd 100644 --- a/models/tags.json +++ b/models/tags.json @@ -1,24 +1,22 @@ { - "summary": [ - { - "name": "tags", - "title": "标签", - "primary": ["id"] + "tblname": "tags", + "params": { + "title": "标签管理", + "browserfields": [ + {"field": "name", "title": "标签名", "width": "25%"}, + {"field": "color", "title": "颜色", "width": "15%"}, + {"field": "kb_id", "title": "知识库", "width": "30%"}, + {"field": "created_at", "title": "创建时间", "width": "30%"} + ], + "editfields": [ + {"field": "name", "uitype": "Text", "required": true, "label": "标签名"}, + {"field": "kb_id", "uitype": "Text", "required": true, "label": "知识库ID"}, + {"field": "color", "uitype": "Text", "default": "#3b82f6", "label": "颜色(#hex)"} + ], + "searchfields": ["name"], + "sort": "created_at desc", + "data_filter": { + "org_id": "{{userorgid}}" } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "name", "title": "标签名", "type": "str", "length": 64}, - {"name": "color", "title": "颜色", "type": "str", "length": 16, "default": "#3b82f6"}, - {"name": "org_id", "title": "所属机构", "type": "str", "length": 32}, - {"name": "created_at", "title": "创建时间", "type": "datetime"} - ], - "codes": [ - {"field": "kb_id", "table": "knowledge_bases", "valuefield": "id", "textfield": "name"} - ], - "indexes": [ - {"name": "idx_tag_kb", "idxtype": "index", "idxfields": ["kb_id"]}, - {"name": "idx_tag_name", "idxtype": "unique", "idxfields": ["kb_id", "name"]} - ] + } } diff --git a/models/usage_logs.json b/models/usage_logs.json deleted file mode 100644 index 4b28e7d..0000000 --- a/models/usage_logs.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "summary": [ - { - "name": "usage_logs", - "title": "用量日志", - "primary": ["id"] - } - ], - "fields": [ - {"name": "id", "title": "ID", "type": "str", "length": 32}, - {"name": "org_id", "title": "机构ID", "type": "str", "length": 32}, - {"name": "kb_id", "title": "知识库ID", "type": "str", "length": 32}, - {"name": "operation", "title": "操作类型", "type": "str", "length": 32}, - {"name": "bytes_delta", "title": "磁盘变化(字节)", "type": "int", "default": 0}, - {"name": "bytes_total", "title": "累计磁盘", "type": "int", "default": 0}, - {"name": "api_calls", "title": "API调用数", "type": "int", "default": 1}, - {"name": "engine_type", "title": "引擎类型", "type": "str", "length": 32}, - {"name": "tokens_used", "title": "Token消耗", "type": "int", "default": 0}, - {"name": "cost_estimate", "title": "预估费用", "type": "float", "length": 20, "dec": 4}, - {"name": "detail", "title": "详情JSON", "type": "text", "length": 2000}, - {"name": "created_at", "title": "创建时间", "type": "datetime"} - ], - "codes": [ - {"field": "operation", "table": "appcodes_kv", "valuefield": "k", "textfield": "v", "cond": "parentid='usage_op'"} - ], - "indexes": [ - {"name": "idx_usage_org", "idxtype": "index", "idxfields": ["org_id", "created_at"]}, - {"name": "idx_usage_kb", "idxtype": "index", "idxfields": ["kb_id"]} - ] -}