ai_config.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. from pymongo import MongoClient
  2. from bson import ObjectId
  3. from datetime import datetime
  4. from dotenv import load_dotenv
  5. import os
  6. load_dotenv()
  7. MONGO_URI = os.getenv("ARK_LOGS_MONGO_URI")
  8. client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=5000)
  9. db = client["arklogs"]
  10. ai_config_col = db["ai_config"]
  11. def _ensure_index():
  12. try:
  13. ai_config_col.create_index([("appName", 1)], unique=True)
  14. ai_config_col.create_index([("status", 1), ("deleted", 1)])
  15. except Exception:
  16. pass
  17. def get_config_by_app_name(app_name: str) -> dict | None:
  18. """根据appName查询配置,只返回启用且未删除的记录"""
  19. try:
  20. _ensure_index()
  21. doc = ai_config_col.find_one({
  22. "appName": app_name,
  23. "status": 1,
  24. "deleted": 0
  25. })
  26. if doc:
  27. doc["_id"] = str(doc["_id"])
  28. return doc
  29. except Exception as e:
  30. print(f"MongoDB 查询 ai_config 失败: {e}")
  31. return None
  32. def create_config(data: dict) -> str | None:
  33. """创建新的配置"""
  34. try:
  35. _ensure_index()
  36. data["status"] = 1
  37. data["deleted"] = 0
  38. data["createdAt"] = datetime.now()
  39. data["updatedAt"] = datetime.now()
  40. result = ai_config_col.insert_one(data)
  41. return str(result.inserted_id)
  42. except Exception as e:
  43. print(f"MongoDB 创建 ai_config 失败: {e}")
  44. return None
  45. def update_config(app_name: str, data: dict) -> int:
  46. """更新配置"""
  47. try:
  48. _ensure_index()
  49. data["updatedAt"] = datetime.now()
  50. result = ai_config_col.update_one(
  51. {"appName": app_name},
  52. {"$set": data}
  53. )
  54. return result.matched_count
  55. except Exception as e:
  56. print(f"MongoDB 更新 ai_config 失败: {e}")
  57. return 0
  58. def delete_config(app_name: str) -> int:
  59. """软删除配置"""
  60. try:
  61. result = ai_config_col.update_one(
  62. {"appName": app_name},
  63. {"$set": {"deleted": 1, "updatedAt": datetime.now()}}
  64. )
  65. return result.matched_count
  66. except Exception as e:
  67. print(f"MongoDB 删除 ai_config 失败: {e}")
  68. return 0
  69. def get_all_configs() -> list:
  70. """获取所有启用的配置"""
  71. try:
  72. _ensure_index()
  73. docs = ai_config_col.find({
  74. "status": 1,
  75. "deleted": 0
  76. })
  77. return [{"_id": str(doc["_id"]), **{k: v for k, v in doc.items() if k != "_id"}} for doc in docs]
  78. except Exception as e:
  79. print(f"MongoDB 查询所有 ai_config 失败: {e}")
  80. return []