Coverage for core/services/user_service.py: 31.82%
44 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"""
5from typing import List, Optional
7from core.models.user import (AccountCreate, User, UserCreate, UserResponse,
8 UserUpdate)
9from core.repositories.user_repository import UserRepository
10from core.services.auth_service import AuthService
13class UserService:
14 """用户服务"""
16 def __init__(self):
17 self.user_repository = UserRepository()
18 self.auth_service = AuthService()
20 def create_user(self, user_data: UserCreate, current_user: User) -> Optional[User]:
21 """创建用户(仅管理员可操作)"""
22 if current_user.user_type != "admin":
23 return None
25 # 检查用户名是否已存在
26 existing_user = self.user_repository.get_user_by_username(user_data.username)
27 if existing_user:
28 return None
30 # 创建用户
31 user = self.user_repository.create_user(user_data, self.auth_service)
33 # 创建默认账户
34 account_data = AccountCreate(
35 user_id=user.id,
36 account_type="demo",
37 balance=10000.0,
38 available_balance=10000.0,
39 currency="CNY",
40 )
41 self.user_repository.create_account(account_data)
43 return user
45 def get_all_users(self, current_user: User) -> Optional[List[User]]:
46 """获取所有用户(仅管理员可操作)"""
47 if current_user.user_type != "admin":
48 return None
50 return self.user_repository.get_all_users()
52 def get_user_by_id(self, user_id: str, current_user: User) -> Optional[User]:
53 """获取用户信息"""
54 # 用户只能查看自己的信息,管理员可以查看所有用户信息
55 if current_user.user_type != "admin" and current_user.id != user_id:
56 return None
58 return self.user_repository.get_user_by_id(user_id)
60 def update_user(
61 self, user_id: str, user_data: UserUpdate, current_user: User
62 ) -> Optional[User]:
63 """更新用户信息"""
64 # 用户只能更新自己的信息,管理员可以更新所有用户信息
65 if current_user.user_type != "admin" and current_user.id != user_id:
66 return None
68 # 普通用户不能修改用户类型
69 if current_user.user_type != "admin" and user_data.user_type:
70 user_data.user_type = None
72 # 如果密码为空或None,则不更新密码
73 if not user_data.password or user_data.password.strip() == "":
74 user_data.password = None
76 return self.user_repository.update_user(user_id, user_data, self.auth_service)
78 def delete_user(self, user_id: str, current_user: User) -> bool:
79 """删除用户(仅管理员可操作)"""
80 if current_user.user_type != "admin":
81 return False
83 # 不能删除自己
84 if current_user.id == user_id:
85 return False
87 return self.user_repository.delete_user(user_id)
89 def get_user_accounts(self, user_id: str, current_user: User) -> Optional[List]:
90 """获取用户账户信息"""
91 # 用户只能查看自己的账户,管理员可以查看所有用户账户
92 if current_user.user_type != "admin" and current_user.id != user_id:
93 return None
95 return self.user_repository.get_user_accounts(user_id)