前端:
1、优化消息排序逻辑 2、新增加载历史消息 3、修复已知问题 后端: 1、优化消息排序逻辑 2、增加用户信息缓存机制 3、修改日期类型为DateTimeOffset改善时区信息丢失问题 3、修复了已知问题 数据库: 1、新增SequenceId字段用于消息排序 2、新增ClientMsgId字段用于客户端消息回执
This commit is contained in:
@@ -5,6 +5,7 @@ using IM_API.Interface.Services;
|
||||
using IM_API.Models;
|
||||
using IM_API.Tools;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace IM_API.Services
|
||||
{
|
||||
@@ -13,31 +14,43 @@ namespace IM_API.Services
|
||||
private readonly ImContext _context;
|
||||
private readonly ILogger<UserService> _logger;
|
||||
private readonly IMapper _mapper;
|
||||
public UserService(ImContext imContext,ILogger<UserService> logger,IMapper mapper)
|
||||
private readonly ICacheService _cacheService;
|
||||
public UserService(ImContext imContext,ILogger<UserService> logger,IMapper mapper, ICacheService cacheService)
|
||||
{
|
||||
this._context = imContext;
|
||||
this._logger = logger;
|
||||
this._mapper = mapper;
|
||||
_cacheService = cacheService;
|
||||
}
|
||||
#region 获取用户信息
|
||||
public async Task<UserInfoDto> GetUserInfoAsync(int userId)
|
||||
{
|
||||
var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == userId);
|
||||
//查询redis缓存,如果存在直接返回不走查库逻辑
|
||||
var key = RedisKeys.GetUserinfoKey(userId.ToString());
|
||||
var userinfoCache = await _cacheService.GetAsync<User>(key);
|
||||
if (userinfoCache != null) return _mapper.Map<UserInfoDto>(userinfoCache);
|
||||
//无缓存查库
|
||||
var user = await _context.Users
|
||||
.FirstOrDefaultAsync(x => x.Id == userId);
|
||||
if (user == null)
|
||||
{
|
||||
throw new BaseException(CodeDefine.USER_NOT_FOUND);
|
||||
}
|
||||
await _cacheService.SetUserCacheAsync(user);
|
||||
return _mapper.Map<UserInfoDto>(user);
|
||||
}
|
||||
#endregion
|
||||
#region 通过用户名获取用户信息
|
||||
public async Task<UserInfoDto> GetUserInfoByUsernameAsync(string username)
|
||||
{
|
||||
var userinfo = await _cacheService.GetUserCacheAsync(username);
|
||||
if (userinfo != null) return _mapper.Map<UserInfoDto>(userinfo);
|
||||
var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == username);
|
||||
if (user == null)
|
||||
{
|
||||
throw new BaseException(CodeDefine.USER_NOT_FOUND);
|
||||
}
|
||||
await _cacheService.SetUserCacheAsync(user);
|
||||
return _mapper.Map<UserInfoDto>(user);
|
||||
}
|
||||
#endregion
|
||||
@@ -70,6 +83,7 @@ namespace IM_API.Services
|
||||
if (user is null) throw new BaseException(CodeDefine.USER_NOT_FOUND);
|
||||
_mapper.Map(dto,user);
|
||||
await _context.SaveChangesAsync();
|
||||
await _cacheService.SetUserCacheAsync(user);
|
||||
return _mapper.Map<UserInfoDto>(user);
|
||||
}
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user