// Package invite runs asynchronous invite validity consumers. package invite import ( "context" invitedomain "hyapp/services/user-service/internal/domain/invite" ) // Repository applies wallet recharge events to user-service invite progress. type Repository interface { ApplyRechargeEvent(ctx context.Context, event invitedomain.RechargeEvent) (invitedomain.RechargeApplyResult, error) } // Service owns the invite validity event consumer. type Service struct { repository Repository } // New creates an invite service with the repository that owns idempotent application. func New(repository Repository) *Service { return &Service{repository: repository} } // ConsumeWalletRechargeEvent applies one MQ-delivered wallet recharge fact. func (s *Service) ConsumeWalletRechargeEvent(ctx context.Context, event invitedomain.RechargeEvent) (invitedomain.RechargeApplyResult, error) { if s == nil || s.repository == nil { return invitedomain.RechargeApplyResult{}, nil } if event.EventType != invitedomain.RechargeEventWalletRecorded { return invitedomain.RechargeApplyResult{Skipped: true, Reason: "unsupported_event_type"}, nil } return s.repository.ApplyRechargeEvent(ctx, event) }