LFlow/LFlow.UserManagement/Service/UserManagementService.cs

85 lines
2.6 KiB
C#

using Azure.Core;
using LFlow.Base.Interfaces;
using LFlow.Base.Utils;
using LFlow.Cache.Interface;
using LFlow.UserManagement.Model;
using LFlow.UserManagement.Util;
using Microsoft.AspNetCore.Http;
namespace LFlow.UserManagement.Service
{
/// <summary>
/// 在线管理服务
/// </summary>
public class UserManagementService(IRepo<UserModel, string> repo, ISelfCache cacher) : IUserManagementService
{
public UserDto? Login(UserDto user)
{
var userPwd = PasswordHelper.HashPassword(user.UserPassword);
var userModel = repo.WhereSearchId(new UserModel
{
UserName = user!.UserName!,
UserPassword = userPwd
});
if (userModel == null || !userModel.Any())
{
return null;
}
var firstUserId = userModel.FirstOrDefault();
if (firstUserId == null)
{
return null;
}
var loginedUser = repo.Get(firstUserId);
loginedUser.UserPassword = "";
var token = Guid.NewGuid().ToString();
// loginedUser.Token = token;
cacher.SetAsync(token, loginedUser, TimeSpan.FromHours(2));
var result = loginedUser.MapTo<UserDto>();
if(result != null){
result.Token = token;
}
return result;
}
public Task<UserDto>? LoginAsync(UserDto user)
{
return Task.FromResult(this.Login(user));
}
public UserDto? Register(UserDto user)
{
if (user.UserEmail == null || user.UserName == null || user.UserPassword == null)
{
throw new Exception("用户名、密码、邮箱不能为空");
}
var userPwd = PasswordHelper.HashPassword(user.UserPassword);
var ids = repo.WhereSearchId(new UserModel
{
UserName = user.UserName
});
if (ids != null && ids.Count > 0)
{
throw new Exception("用户名已存在");
}
var userModel = new UserModel
{
ID = Guid.NewGuid().ToString(),
UserName = user.UserName,
UserEmail = user.UserEmail,
UserPassword = userPwd
};
var savedUser = repo.SaveOrUpdate(userModel, false).MapTo<UserDto>();
savedUser.UserPassword = "";
return savedUser;
}
public Task<UserDto> RegisterAsync(UserDto user)
{
return Task.FromResult(this.Register(user));
}
}
}