add:
更新
This commit is contained in:
@@ -10,9 +10,11 @@ using IM_API.Tools;
|
||||
using IM_API.VOs.Message;
|
||||
using MassTransit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using StackExchange.Redis;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using static MassTransit.Monitoring.Performance.BuiltInCounters;
|
||||
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
||||
|
||||
@@ -28,10 +30,13 @@ namespace IM_API.Services
|
||||
private readonly IPublishEndpoint _endpoint;
|
||||
private readonly ISequenceIdService _sequenceIdService;
|
||||
private readonly IUserService _userService;
|
||||
private readonly IUploadTaskService _uploadService;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
public MessageService(
|
||||
ImContext context, ILogger<MessageService> logger, IMapper mapper,
|
||||
IPublishEndpoint publishEndpoint, ISequenceIdService sequenceIdService,
|
||||
IUserService userService
|
||||
IUserService userService, IUploadTaskService uploadTaskService,
|
||||
IHttpContextAccessor httpContextAccessor
|
||||
)
|
||||
{
|
||||
_context = context;
|
||||
@@ -41,6 +46,8 @@ namespace IM_API.Services
|
||||
_endpoint = publishEndpoint;
|
||||
_sequenceIdService = sequenceIdService;
|
||||
_userService = userService;
|
||||
_uploadService = uploadTaskService;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
public async Task<List<MessageBaseVo>> GetMessagesAsync(int userId,MessageQueryDto dto)
|
||||
@@ -91,6 +98,12 @@ namespace IM_API.Services
|
||||
|
||||
foreach (var item in messages)
|
||||
{
|
||||
if(item.Type != MessageMsgType.Text)
|
||||
{
|
||||
var request = _httpContextAccessor.HttpContext?.Request;
|
||||
var baseUrl = $"{request.Scheme}://{request.Host}";
|
||||
item.Content = UrlTools.ProcessMessageUrl(item.Content, baseUrl);
|
||||
}
|
||||
if(userDict.TryGetValue(item.SenderId, out var user))
|
||||
{
|
||||
item.SenderName = user.NickName;
|
||||
@@ -143,7 +156,10 @@ namespace IM_API.Services
|
||||
var message = _mapper.Map<Message>(dto);
|
||||
message.StreamKey = StreamKeyBuilder.Group(groupId);
|
||||
message.SequenceId = await _sequenceIdService.GetNextSquenceIdAsync(message.StreamKey);
|
||||
await _endpoint.Publish(_mapper.Map<MessageCreatedEvent>(message));
|
||||
var publishData = _mapper.Map<MessageCreatedEvent>(message);
|
||||
var request = _httpContextAccessor.HttpContext?.Request;
|
||||
publishData.BaseUrl = $"{request.Scheme}://{request.Host}";
|
||||
await _endpoint.Publish(publishData);
|
||||
return _mapper.Map<MessageBaseVo>(message);
|
||||
|
||||
}
|
||||
@@ -156,9 +172,40 @@ namespace IM_API.Services
|
||||
var message = _mapper.Map<Message>(dto);
|
||||
message.StreamKey = StreamKeyBuilder.Private(senderId, receiverId);
|
||||
message.SequenceId = await _sequenceIdService.GetNextSquenceIdAsync(message.StreamKey);
|
||||
await _endpoint.Publish(_mapper.Map<MessageCreatedEvent>(message));
|
||||
var publishData = _mapper.Map<MessageCreatedEvent>(message);
|
||||
var request = _httpContextAccessor.HttpContext?.Request;
|
||||
publishData.BaseUrl = $"{request.Scheme}://{request.Host}";
|
||||
await _endpoint.Publish(publishData);
|
||||
return _mapper.Map<MessageBaseVo>(message);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public async Task<MessageBaseDto> HandleFileMessageContentAsync(MessageBaseDto dto)
|
||||
{
|
||||
if(dto.Type == MessageMsgType.Text)
|
||||
{
|
||||
return dto;
|
||||
}
|
||||
|
||||
var dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(dto.Content);
|
||||
|
||||
if (dic == null || !dic.TryGetValue("fileId", out var fileIdObj))
|
||||
throw new BaseException(CodeDefine.PARAMETER_ERROR);
|
||||
|
||||
var fileInfo = await _uploadService.GetTaskAsync(new Guid(fileIdObj.ToString()));
|
||||
|
||||
if (fileInfo is null)
|
||||
throw new BaseException(CodeDefine.FILE_NOT_FOUND);
|
||||
|
||||
|
||||
|
||||
dic["url"] = fileInfo.ObjectName;
|
||||
dic["provider"] = fileInfo.StorageProvider;
|
||||
dic["size"] = fileInfo.FileSize;
|
||||
|
||||
dto.Content = JsonConvert.SerializeObject(dic);
|
||||
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user