Files
inventory-plus-plus/server/sse/db_event_publisher.go
T

45 lines
1.0 KiB
Go

package sse
import (
"context"
"fmt"
"ruben/inventory2/domains/raw_events"
)
type (
DBEventPublisher struct {
queue sender
getAccountID func(context.Context, raw_events.Event) (int64, error)
getEventType func(acctID int64, e raw_events.Event) (string, error)
}
)
func (q *Queue) NewDBEventPublisher(
getAccountID func(context.Context, raw_events.Event) (int64, error),
getEventType func(acctID int64, e raw_events.Event) (string, error),
) *DBEventPublisher {
return &DBEventPublisher{
queue: q,
getAccountID: getAccountID,
getEventType: getEventType,
}
}
func (p *DBEventPublisher) Notify(ctx context.Context, e raw_events.Event) error {
acctID, err := p.getAccountID(ctx, e)
if err != nil {
return fmt.Errorf("failed to get account id: %w", err)
}
et, err := p.getEventType(acctID, e)
if err != nil {
return fmt.Errorf("failed to compute event type: %w", err)
}
if err := p.queue.Send(ctx, StandardEvent(acctID, et)); err != nil {
return fmt.Errorf("failed to send sse event to listener: %w", err)
}
return nil
}