Skip to content

Commit

Permalink
refactor: update EventExtensions
Browse files Browse the repository at this point in the history
  • Loading branch information
WeihanLi committed Jan 3, 2025
1 parent 6f2a521 commit 07f9da5
Showing 1 changed file with 42 additions and 8 deletions.
50 changes: 42 additions & 8 deletions src/WeihanLi.Common/Event/EventBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,26 +67,60 @@ public interface IEvent<out T>
public class EventWrapper<T> : IEvent, IEvent<T>
{
public required T Data { get; init; }
object? IEvent.Data => (object?)Data;
object? IEvent.Data => Data;
public required EventProperties Properties { get; init; }
}

public static class EventBaseExtensions
public static class EventExtensions
{
private static readonly JsonSerializerSettings EventSerializerSettings = JsonSerializeExtension.SerializerSettingsWith(s =>
{
s.TypeNameHandling = TypeNameHandling.Objects;
});
private static readonly JsonSerializerSettings EventSerializerSettings = JsonSerializeExtension
.SerializerSettingsWith(s =>
{
s.NullValueHandling = NullValueHandling.Ignore;
s.TypeNameHandling = TypeNameHandling.Objects;
});

public static string ToEventMsg<TEvent>(this TEvent @event)
{
Guard.NotNull(@event);
return @event.ToJson(EventSerializerSettings);
return GetEvent(@event).ToJson(EventSerializerSettings);
}

private static IEvent GetEvent<TEvent>(this TEvent @event)
{
if (@event is IEvent eventEvent)
return eventEvent;

if (@event is IEventBase eventBase)
return new EventWrapper<TEvent>()
{
Data = @event,
Properties = new()
{
EventAt = eventBase.EventAt,
EventId = eventBase.EventId
}
};

return new EventWrapper<TEvent>
{
Data = @event,
Properties = new EventProperties
{
EventAt = DateTimeOffset.Now
}
};
}

public static IEventBase ToEvent(this string eventMsg)
public static IEventBase ToEventBase(this string eventMsg)
{
Guard.NotNull(eventMsg);
return eventMsg.JsonToObject<IEventBase>(EventSerializerSettings);
}

public static IEvent ToEvent(this string eventMsg)
{
Guard.NotNull(eventMsg);
return eventMsg.JsonToObject<IEvent>(EventSerializerSettings);
}
}

0 comments on commit 07f9da5

Please sign in to comment.