diff --git a/Haoliang.Core/Services/StubServices.cs b/Haoliang.Core/Services/StubServices.cs index 56957fa..c27610d 100644 --- a/Haoliang.Core/Services/StubServices.cs +++ b/Haoliang.Core/Services/StubServices.cs @@ -20,35 +20,176 @@ using Haoliang.Models.Production; using Haoliang.Models.System; using Haoliang.Models.Template; using Haoliang.Models.DataCollection; +using Haoliang.Data.Repositories; namespace Haoliang.Core.Services { #region ========== 用户与认证服务 ========== public class AuthService : IAuthService { - public Task LoginAsync(LoginRequest request) => Task.FromResult(null); - public Task LogoutAsync(int userId) => Task.FromResult(false); + private readonly IUserRepository _userRepository; + private readonly ICacheService _cache; + + public AuthService(IUserRepository userRepository, ICacheService cache) + { + _userRepository = userRepository; + _cache = cache; + } + + public async Task LoginAsync(LoginRequest request) + { + var user = await _userRepository.AuthenticateAsync(request.Username, request.Password); + if (user == null) + { + return new AuthResult + { + Success = false, + Message = "用户名或密码错误" + }; + } + + return new AuthResult + { + Success = true, + User = user, + Message = "登录成功", + Permissions = user.Role?.Permissions ?? new List() + }; + } + + public Task LogoutAsync(int userId) => Task.FromResult(true); + public Task RefreshTokenAsync(string refreshToken) => Task.FromResult(null); - public Task UsernameExistsAsync(string username) => Task.FromResult(false); - public Task EmailExistsAsync(string email) => Task.FromResult(false); - public Task GetUserByIdAsync(int userId) => Task.FromResult(null); + + public Task UsernameExistsAsync(string username) => _userRepository.UsernameExistsAsync(username); + + public Task EmailExistsAsync(string email) => _userRepository.EmailExistsAsync(email); + + public async Task GetUserByIdAsync(int userId) + { + return await _userRepository.GetByIdAsync(userId); + } } public class UserService : IUserService { - public Task CreateUserAsync(User user) => Task.FromResult(null); - public Task GetUserByIdAsync(int userId) => Task.FromResult(null); - public Task> GetAllUsersAsync() => Task.FromResult>(new List()); - public Task UpdateUserAsync(int userId, User user) => Task.FromResult(null); - public Task ChangePasswordAsync(int userId, string oldPassword, string newPassword) => Task.FromResult(false); - public Task ActivateUserAsync(int userId) => Task.FromResult(false); - public Task DeactivateUserAsync(int userId) => Task.FromResult(false); + private readonly IUserRepository _userRepository; + + public UserService(IUserRepository userRepository) + { + _userRepository = userRepository; + } + + public async Task CreateUserAsync(User user) + { + user.CreatedAt = DateTime.Now; + user.UpdatedAt = DateTime.Now; + await _userRepository.AddAsync(user); + await _userRepository.SaveAsync(); + + return MapToUserViewModel(user); + } + + public async Task GetUserByIdAsync(int userId) + { + var user = await _userRepository.GetByIdAsync(userId); + return user != null ? MapToUserViewModel(user) : null; + } + + public async Task> GetAllUsersAsync() + { + var users = await _userRepository.GetAllAsync(); + return users.Select(MapToUserViewModel); + } + + public async Task UpdateUserAsync(int userId, User user) + { + var existingUser = await _userRepository.GetByIdAsync(userId); + if (existingUser == null) + return null; + + existingUser.RealName = user.RealName; + existingUser.Email = user.Email; + existingUser.Phone = user.Phone; + existingUser.Department = user.Department; + existingUser.RoleId = user.RoleId; + existingUser.IsActive = user.IsActive; + existingUser.UpdatedAt = DateTime.Now; + + _userRepository.Update(existingUser); + await _userRepository.SaveAsync(); + + return MapToUserViewModel(existingUser); + } + + public Task ChangePasswordAsync(int userId, string oldPassword, string newPassword) + => _userRepository.ChangePasswordAsync(userId, oldPassword, newPassword); + + public async Task ActivateUserAsync(int userId) + { + var user = await _userRepository.GetByIdAsync(userId); + if (user == null) return false; + + user.IsActive = true; + user.UpdatedAt = DateTime.Now; + _userRepository.Update(user); + await _userRepository.SaveAsync(); + return true; + } + + public async Task DeactivateUserAsync(int userId) + { + var user = await _userRepository.GetByIdAsync(userId); + if (user == null) return false; + + user.IsActive = false; + user.UpdatedAt = DateTime.Now; + _userRepository.Update(user); + await _userRepository.SaveAsync(); + return true; + } + + private UserViewModel MapToUserViewModel(User user) + { + return new UserViewModel + { + Id = user.Id, + Username = user.Username, + RealName = user.RealName, + Email = user.Email, + Phone = user.Phone, + Role = user.Role?.RoleName, + RoleName = user.Role?.RoleName, + Department = user.Department, + IsActive = user.IsActive, + LastLoginTime = user.LastLoginTime, + CreatedAt = user.CreatedAt, + Permissions = user.Role?.Permissions ?? new List() + }; + } } public class PermissionService : IPermissionService { - public Task> GetUserPermissionsAsync(int userId) => Task.FromResult>(new List()); - public Task HasPermissionAsync(int userId, string permission) => Task.FromResult(false); + private readonly IUserRepository _userRepository; + + public PermissionService(IUserRepository userRepository) + { + _userRepository = userRepository; + } + + public async Task> GetUserPermissionsAsync(int userId) + { + var user = await _userRepository.GetByIdAsync(userId); + return user?.Role?.Permissions ?? new List(); + } + + public async Task HasPermissionAsync(int userId, string permission) + { + var permissions = await GetUserPermissionsAsync(userId); + return permissions.Contains(permission); + } + public Task AssignPermissionsToUserAsync(int userId, IEnumerable permissions) => Task.CompletedTask; public Task RemoveAllPermissionsFromUserAsync(int userId) => Task.CompletedTask; }