2026-06-11 18:14:04 +08:00

68 lines
2.5 KiB
Go

package app
import (
"encoding/json"
"hyapp/pkg/appcode"
"hyapp/pkg/usermq"
inviteactivitydomain "hyapp/services/activity-service/internal/domain/inviteactivity"
)
func inviteActivityValidInviteEventFromUserMessage(body []byte) (inviteactivitydomain.ValidInviteEvent, bool, error) {
message, err := usermq.DecodeUserOutboxMessage(body)
if err != nil {
return inviteactivitydomain.ValidInviteEvent{}, false, err
}
if message.EventType != inviteactivitydomain.EventTypeUserInviteBecameValid {
return inviteactivitydomain.ValidInviteEvent{}, false, nil
}
var decoded map[string]any
if err := json.Unmarshal([]byte(message.PayloadJSON), &decoded); err != nil || decoded == nil {
decoded = map[string]any{}
}
invitedUserID := firstNonZeroInt64(int64FromDecoded(decoded, "invited_user_id"), message.AggregateID)
inviterUserID := int64FromDecoded(decoded, "inviter_user_id")
if invitedUserID <= 0 || inviterUserID <= 0 {
return inviteactivitydomain.ValidInviteEvent{}, false, nil
}
return inviteactivitydomain.ValidInviteEvent{
AppCode: appcode.Normalize(message.AppCode),
EventID: message.EventID,
EventType: message.EventType,
InviterUserID: inviterUserID,
InvitedUserID: invitedUserID,
PayloadJSON: message.PayloadJSON,
OccurredAtMS: message.OccurredAtMS,
}, true, nil
}
func inviteActivityInviteEventFromUserMessage(body []byte) (inviteactivitydomain.InviteEvent, bool, error) {
message, err := usermq.DecodeUserOutboxMessage(body)
if err != nil {
return inviteactivitydomain.InviteEvent{}, false, err
}
if message.EventType != inviteactivitydomain.EventTypeUserInvited {
return inviteactivitydomain.InviteEvent{}, false, nil
}
var decoded map[string]any
if err := json.Unmarshal([]byte(message.PayloadJSON), &decoded); err != nil || decoded == nil {
decoded = map[string]any{}
}
invitedUserID := firstNonZeroInt64(int64FromDecoded(decoded, "invited_user_id"), message.AggregateID)
inviterUserID := int64FromDecoded(decoded, "inviter_user_id")
if invitedUserID <= 0 || inviterUserID <= 0 {
return inviteactivitydomain.InviteEvent{}, false, nil
}
return inviteactivitydomain.InviteEvent{
AppCode: appcode.Normalize(message.AppCode),
EventID: message.EventID,
EventType: message.EventType,
InviterUserID: inviterUserID,
InvitedUserID: invitedUserID,
InviteCode: stringFromDecoded(decoded, "invite_code"),
Source: stringFromDecoded(decoded, "source"),
PayloadJSON: message.PayloadJSON,
OccurredAtMS: message.OccurredAtMS,
}, true, nil
}