Coverage for core/repositories/settings_repository.py: 32.65%
98 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 18:58 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 18:58 +0000
1"""
2系统设置数据仓库
3"""
5import json
6from datetime import datetime
7from typing import Optional
9from core.models.settings import (AssetModeType, DataSourceConfig,
10 LongportConfig, UserSettings)
11from infrastructure.database.redis_client import RedisClient
14class SettingsRepository:
15 def __init__(self, redis_client: Optional[RedisClient] = None):
16 self.redis = redis_client or RedisClient()
17 self.settings_key_prefix = "user_settings:"
19 def _get_user_settings_key(self, user_id: str) -> str:
20 """获取用户设置键"""
21 return f"{self.settings_key_prefix}{user_id}"
23 def get_user_settings(self, user_id: str) -> Optional[UserSettings]:
24 """获取用户设置"""
25 settings_key = self._get_user_settings_key(user_id)
26 data = self.redis.get(settings_key)
28 if data and isinstance(data, dict):
29 return UserSettings(**data)
30 return None
32 def save_user_settings(self, user_settings: UserSettings) -> bool:
33 """保存用户设置"""
34 try:
35 settings_key = self._get_user_settings_key(user_settings.user_id)
36 settings_dict = user_settings.model_dump()
38 print(f"保存用户设置: {settings_key}, 数据: {settings_dict}")
40 # 设置过期时间为30天
41 self.redis.setex(settings_key, 86400 * 30, settings_dict)
43 # 验证保存是否成功
44 saved_data = self.redis.get(settings_key)
45 print(f"验证保存结果: {saved_data}")
47 return True
48 except Exception as e:
49 print(f"保存用户设置失败: {e}")
50 return False
52 def update_data_source_config(
53 self, user_id: str, data_source_config: DataSourceConfig
54 ) -> bool:
55 """更新数据源配置"""
56 try:
57 user_settings = self.get_user_settings(user_id)
58 if not user_settings:
59 user_settings = UserSettings(user_id=user_id)
61 user_settings.data_source_config = data_source_config
62 user_settings.updated_at = datetime.utcnow().isoformat()
64 return self.save_user_settings(user_settings)
65 except Exception as e:
66 print(f"更新数据源配置失败: {e}")
67 return False
69 def update_longport_config(
70 self, user_id: str, longport_config: LongportConfig
71 ) -> bool:
72 """更新长桥证券配置"""
73 try:
74 user_settings = self.get_user_settings(user_id)
75 if not user_settings:
76 user_settings = UserSettings(user_id=user_id)
78 user_settings.longport_config = longport_config
79 user_settings.updated_at = datetime.utcnow().isoformat()
81 return self.save_user_settings(user_settings)
82 except Exception as e:
83 print(f"更新长桥证券配置失败: {e}")
84 return False
86 def get_data_source_config(self, user_id: str) -> Optional[DataSourceConfig]:
87 """获取数据源配置"""
88 user_settings = self.get_user_settings(user_id)
89 return user_settings.data_source_config if user_settings else None
91 def get_longport_config(self, user_id: str) -> Optional[LongportConfig]:
92 """获取长桥证券配置"""
93 user_settings = self.get_user_settings(user_id)
94 return user_settings.longport_config if user_settings else None
96 def get_asset_mode(self, user_id: str) -> AssetModeType:
97 """获取资产模式"""
98 user_settings = self.get_user_settings(user_id)
99 # print(f"获取资产模式: user_id={user_id}, settings={user_settings}") # 已禁用调试输出
100 return user_settings.asset_mode if user_settings else AssetModeType.TRADING
102 def update_asset_mode(self, user_id: str, asset_mode: AssetModeType) -> bool:
103 """更新资产模式"""
104 try:
105 user_settings = self.get_user_settings(user_id)
106 if not user_settings:
107 user_settings = UserSettings(user_id=user_id)
109 user_settings.asset_mode = asset_mode
110 user_settings.updated_at = datetime.utcnow().isoformat()
111 return self.save_user_settings(user_settings)
112 except Exception as e:
113 print(f"更新资产模式失败: {e}")
114 return False
116 def update_data_source_type(self, user_id: str, data_source_type: str) -> bool:
117 """更新数据源类型"""
118 try:
119 user_settings = self.get_user_settings(user_id)
120 if not user_settings:
121 user_settings = UserSettings(user_id=user_id)
123 if not user_settings.data_source_config:
124 user_settings.data_source_config = DataSourceConfig()
126 # 设置数据源类型
127 user_settings.data_source_config.type = data_source_type
128 user_settings.updated_at = datetime.utcnow().isoformat()
130 return self.save_user_settings(user_settings)
131 except Exception as e:
132 print(f"更新数据源类型失败: {e}")
133 return False
135 def get_data_source_type(self, user_id: str) -> Optional[str]:
136 """获取数据源类型"""
137 user_settings = self.get_user_settings(user_id)
138 if user_settings and user_settings.data_source_config:
139 return user_settings.data_source_config.type
140 return None
142 def get_user_setting(self, user_id: str, setting_key: str) -> Optional[str]:
143 """获取用户的特定设置"""
144 user_settings = self.get_user_settings(user_id)
145 if not user_settings:
146 return None
148 # 根据设置键返回对应的值
149 if setting_key == "data_source_type":
150 return self.get_data_source_type(user_id)
151 elif setting_key == "asset_mode":
152 return user_settings.asset_mode.value if user_settings.asset_mode else None
154 return None