82 lines
2.8 KiB
C#
82 lines
2.8 KiB
C#
using IM.Commons.IntegrationEvents;
|
|
|
|
namespace ConnectorService.Dtos
|
|
{
|
|
public record MessageHubResponse
|
|
{
|
|
public Guid Id { get; init; }
|
|
|
|
/// <summary>
|
|
/// 客户端去重/回执使用的本地 ID
|
|
/// </summary>
|
|
public Guid ClientId { get; init; }
|
|
|
|
public string ChatType { get; init; } = string.Empty;
|
|
public string MsgType { get; init; } = string.Empty;
|
|
public Guid SenderId { get; init; }
|
|
public Guid TargetId { get; init; }
|
|
public string State { get; init; } = string.Empty;
|
|
public string StreamKey { get; init; } = string.Empty;
|
|
public long SequenceId { get; init; }
|
|
|
|
/// <summary>
|
|
/// 服务器推送到达时间 (毫秒级时间戳,强烈建议加上)
|
|
/// </summary>
|
|
public long PushTimestamp { get; init; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
public HubMsgContentDto Content { get; init; } = null!;
|
|
}
|
|
|
|
// 嵌套的内容对象,允许 Ext 和 Quote 为 null 以缩减 JSON 体积
|
|
public record HubMsgContentDto(
|
|
string Fallback,
|
|
object Body,
|
|
Dictionary<string, string>? Ext,
|
|
HubQuoteInfoDto? Quote
|
|
);
|
|
|
|
public record HubQuoteInfoDto(
|
|
Guid MessageId,
|
|
Guid SenderId,
|
|
string SenderName,
|
|
string MessageType,
|
|
string Preview
|
|
);
|
|
public static class MessageEventMapper
|
|
{
|
|
/// <summary>
|
|
/// 将内部集成事件转换为对外推送的 DTO
|
|
/// </summary>
|
|
public static MessageHubResponse ToHubResponse(this MsgCreatedEvent @event)
|
|
{
|
|
if (@event == null) throw new ArgumentNullException(nameof(@event));
|
|
|
|
return new MessageHubResponse
|
|
{
|
|
Id = @event.Id,
|
|
ClientId = @event.ClientId,
|
|
ChatType = @event.ChatType,
|
|
MsgType = @event.MsgType,
|
|
SenderId = @event.SenderId,
|
|
TargetId = @event.TargetId,
|
|
State = @event.State,
|
|
StreamKey = @event.StreamKey,
|
|
SequenceId = @event.SequenceId,
|
|
// 嵌套映射
|
|
Content = @event.Content != null ? new HubMsgContentDto(
|
|
@event.Content.Fallback,
|
|
@event.Content.Body,
|
|
@event.Content.Ext,
|
|
@event.Content.Quote != null ? new HubQuoteInfoDto(
|
|
@event.Content.Quote.MessageId,
|
|
@event.Content.Quote.SenderId,
|
|
@event.Content.Quote.SenderName,
|
|
@event.Content.Quote.MessageType,
|
|
@event.Content.Quote.Preview
|
|
) : null
|
|
) : null!
|
|
};
|
|
}
|
|
}
|
|
}
|