feat:图表交互
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
"""物料目录的 MongoDB 存储:每个组件一条记录,目录版本放在元数据记录中,
|
||||
"""物料目录的 MongoDB 存储:每个组件一条记录,目录版本和共享事件组放在元数据记录中,
|
||||
多个物料共用的字段分组单独存放,每个分组一条记录"""
|
||||
|
||||
from loguru import logger
|
||||
@@ -22,6 +22,14 @@ class MongoMaterialRepository:
|
||||
meta = await self._materials.find_one({"_id": META_ID})
|
||||
if meta is None:
|
||||
return None
|
||||
if "event_groups" not in meta:
|
||||
# 共享事件组之前的导入:事件写在各物料上,按现在的格式读出来每个物料都没有事件。
|
||||
# 不兼容旧格式,按未导入处理,重新导入即可
|
||||
logger.error(
|
||||
"物料目录是旧格式导入的(元数据记录没有 event_groups),按未导入处理;"
|
||||
"运行 uv run python -m scripts.seed_materials 重新导入后重启"
|
||||
)
|
||||
return None
|
||||
documents = await self._materials.find({"_id": {"$ne": META_ID}}).to_list()
|
||||
groups = await self._field_groups.find({}).to_list()
|
||||
return ComponentCatalog.model_validate(
|
||||
@@ -29,6 +37,7 @@ class MongoMaterialRepository:
|
||||
"version": meta["version"],
|
||||
"components": _ordered(documents),
|
||||
"field_groups": _ordered(groups),
|
||||
"event_groups": meta["event_groups"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -41,7 +50,16 @@ class MongoMaterialRepository:
|
||||
await collection.delete_many({})
|
||||
if items:
|
||||
await collection.insert_many(_documents(items))
|
||||
await self._materials.insert_one({"_id": META_ID, "version": catalog.version})
|
||||
# 事件组只有几项,跟版本一起放在元数据记录里
|
||||
await self._materials.insert_one(
|
||||
{
|
||||
"_id": META_ID,
|
||||
"version": catalog.version,
|
||||
"event_groups": [
|
||||
group.model_dump(mode="json") for group in catalog.event_groups
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def _documents(items) -> list[dict]:
|
||||
@@ -65,7 +83,7 @@ async def warm_material_cache(db: AsyncDatabase | None) -> ComponentCatalog | No
|
||||
if catalog is None:
|
||||
logger.error(
|
||||
"物料目录未载入:{},新增、更换组件等需要物料的修改将无法执行",
|
||||
"未配置 MONGODB_URI" if db is None else "materials 集合尚未导入",
|
||||
"未配置 MONGODB_URI" if db is None else "materials 集合尚未导入或格式过旧",
|
||||
)
|
||||
else:
|
||||
logger.info("已从 MongoDB 加载物料 {} 个", len(catalog.components))
|
||||
|
||||
Reference in New Issue
Block a user