添加项目文件。
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
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!
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user