IM/backend/IM_API/Services/AuthService.cs
nanxun 58bc8b4b5a 前端:
1、优化消息排序逻辑
2、新增加载历史消息
3、修复已知问题
后端:
1、优化消息排序逻辑
2、增加用户信息缓存机制
3、修改日期类型为DateTimeOffset改善时区信息丢失问题
3、修复了已知问题
数据库:
1、新增SequenceId字段用于消息排序
2、新增ClientMsgId字段用于客户端消息回执
2026-02-07 22:37:56 +08:00

54 lines
1.9 KiB
C#

using AutoMapper;
using IM_API.Dtos.Auth;
using IM_API.Dtos.User;
using IM_API.Exceptions;
using IM_API.Interface.Services;
using IM_API.Models;
using IM_API.Tools;
using Microsoft.EntityFrameworkCore;
namespace IM_API.Services
{
public class AuthService : IAuthService
{
private readonly ImContext _context;
private readonly ILogger<AuthService> _logger;
private readonly IMapper _mapper;
private readonly ICacheService _cache;
public AuthService(ImContext context, ILogger<AuthService> logger, IMapper mapper, ICacheService cache)
{
_context = context;
_logger = logger;
_mapper = mapper;
_cache = cache;
}
public async Task<User> LoginAsync(LoginRequestDto dto)
{
var userinfo = await _cache.GetUserCacheAsync(dto.Username);
if (userinfo != null && userinfo.Password == dto.Password) return userinfo;
string username = dto.Username;
string password = dto.Password;
var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == username && x.Password == password);
if(user is null)
{
throw new BaseException(CodeDefine.PASSWORD_ERROR);
}
await _cache.SetUserCacheAsync(user);
return user;
}
public async Task<UserInfoDto> RegisterAsync(RegisterRequestDto dto)
{
string username = dto.Username;
//用户是否存在
bool isExist = await _context.Users.AnyAsync(x => x.Username == username);
if (isExist) throw new BaseException(CodeDefine.USER_ALREADY_EXISTS);
User user = _mapper.Map<User>(dto);
_context.Users.Add(user);
await _context.SaveChangesAsync();
return _mapper.Map<UserInfoDto>(user);
}
}
}