notification

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AfterSend

func AfterSend(fn func(Notification, error))

AfterSend registers a callback invoked when Send completes. It receives the notification and the error from the mail step (if any); if mail succeeded, the notification was also broadcast (when applicable) before the hook runs.

func Broadcast

func Broadcast(n Notification)

Broadcast sends the notification over the transmit SSE system (if configured). When no Transmit plugin/transport is registered, this is a no-op.

func Send

func Send(n Notification) error

Send delivers the notification on all supported channels. If mail.Default is nil, the mail channel is skipped.

func SendMail

func SendMail(n Notification) error

SendMail sends the notification via the configured mail driver (if any).

Types

type DBNotification

type DBNotification struct {
	ID             string     `gorm:"primaryKey;size:36" json:"id"`
	Type           string     `gorm:"size:255;index" json:"type"`
	NotifiableID   string     `gorm:"size:255;index:idx_notifiable" json:"notifiable_id"`
	NotifiableType string     `gorm:"size:255;index:idx_notifiable" json:"notifiable_type"`
	Data           string     `gorm:"type:text" json:"data"` // JSON-encoded
	ReadAt         *time.Time `json:"read_at"`
	CreatedAt      time.Time  `json:"created_at"`
	UpdatedAt      time.Time  `json:"updated_at"`
}

DBNotification represents a stored notification record.

func (DBNotification) TableName

func (DBNotification) TableName() string

TableName returns the table name for the notification model.

type DatabaseChannel

type DatabaseChannel struct {
	// contains filtered or unexported fields
}

DatabaseChannel stores notifications in the database.

func NewDatabaseChannel

func NewDatabaseChannel(db *lucid.DB) *DatabaseChannel

NewDatabaseChannel creates a database notification channel.

func (*DatabaseChannel) All

func (c *DatabaseChannel) All(ctx context.Context, notifiableID, notifiableType string) ([]DBNotification, error)

All returns all notifications for a notifiable.

func (*DatabaseChannel) Delete

func (c *DatabaseChannel) Delete(ctx context.Context, id string) error

Delete removes a notification by ID.

func (*DatabaseChannel) DeleteAll

func (c *DatabaseChannel) DeleteAll(ctx context.Context, notifiableID, notifiableType string) error

DeleteAll removes all notifications for a notifiable.

func (*DatabaseChannel) MarkAllAsRead

func (c *DatabaseChannel) MarkAllAsRead(ctx context.Context, notifiableID, notifiableType string) error

MarkAllAsRead marks all notifications for a notifiable as read.

func (*DatabaseChannel) MarkAsRead

func (c *DatabaseChannel) MarkAsRead(ctx context.Context, id string) error

MarkAsRead marks a notification as read.

func (*DatabaseChannel) Migrate

func (c *DatabaseChannel) Migrate() error

Migrate creates the notifications table.

func (*DatabaseChannel) Send

func (c *DatabaseChannel) Send(ctx context.Context, notifiableID, notifiableType, notificationType string, n DatabaseNotification) error

Send stores the notification in the database.

func (*DatabaseChannel) Unread

func (c *DatabaseChannel) Unread(ctx context.Context, notifiableID, notifiableType string) ([]DBNotification, error)

Unread returns unread notifications for a notifiable.

type DatabaseNotification

type DatabaseNotification interface {
	Notification
	// ToDatabase returns the data map to store in the notifications table.
	// Return nil to skip the database channel.
	ToDatabase() map[string]any
}

DatabaseNotification is for notifications that support the database channel.

type DiscordChannel

type DiscordChannel struct {
	WebhookURL string
}

DiscordChannel sends notifications via Discord webhooks.

func NewDiscordChannel

func NewDiscordChannel(webhookURL string) *DiscordChannel

NewDiscordChannel creates a Discord channel with the given webhook URL.

func (*DiscordChannel) Send

Send sends the notification to Discord.

type DiscordEmbed

type DiscordEmbed struct {
	Title       string              `json:"title,omitempty"`
	Description string              `json:"description,omitempty"`
	URL         string              `json:"url,omitempty"`
	Color       int                 `json:"color,omitempty"` // decimal color value
	Fields      []DiscordEmbedField `json:"fields,omitempty"`
	Footer      *DiscordEmbedFooter `json:"footer,omitempty"`
	Timestamp   string              `json:"timestamp,omitempty"` // ISO8601
}

DiscordEmbed represents an embedded rich content block.

type DiscordEmbedField

type DiscordEmbedField struct {
	Name   string `json:"name"`
	Value  string `json:"value"`
	Inline bool   `json:"inline,omitempty"`
}

DiscordEmbedField is a field within a Discord embed.

type DiscordEmbedFooter

type DiscordEmbedFooter struct {
	Text    string `json:"text"`
	IconURL string `json:"icon_url,omitempty"`
}

DiscordEmbedFooter is the footer of a Discord embed.

type DiscordMessage

type DiscordMessage struct {
	Content   string         `json:"content,omitempty"`
	Username  string         `json:"username,omitempty"`
	AvatarURL string         `json:"avatar_url,omitempty"`
	Embeds    []DiscordEmbed `json:"embeds,omitempty"`
}

DiscordMessage represents a Discord webhook message.

type DiscordNotification

type DiscordNotification interface {
	Notification
	// ToDiscord returns the Discord webhook message, or nil to skip.
	ToDiscord() *DiscordMessage
}

DiscordNotification is for notifications that support the Discord channel.

type Notification

type Notification interface {
	// ToMail returns the mail message for this notification, or nil to skip mail.
	ToMail() *mail.Message
	// ToBroadcast returns the channel and payload for realtime broadcasts.
	// Return empty channel to skip broadcast.
	ToBroadcast() (channel string, payload any)
}

Notification describes a multi-channel notification. Implementations can choose to support one or more channels.

type SlackAttachment

type SlackAttachment struct {
	Color    string       `json:"color,omitempty"`
	Title    string       `json:"title,omitempty"`
	Text     string       `json:"text,omitempty"`
	Fields   []SlackField `json:"fields,omitempty"`
	Footer   string       `json:"footer,omitempty"`
	Fallback string       `json:"fallback,omitempty"`
}

SlackAttachment represents a Slack message attachment.

type SlackChannel

type SlackChannel struct {
	WebhookURL string
}

SlackChannel sends notifications via Slack incoming webhooks.

func NewSlackChannel

func NewSlackChannel(webhookURL string) *SlackChannel

NewSlackChannel creates a Slack channel with the given webhook URL.

func (*SlackChannel) Send

Send sends the notification to Slack.

type SlackField

type SlackField struct {
	Title string `json:"title"`
	Value string `json:"value"`
	Short bool   `json:"short,omitempty"`
}

SlackField is a key-value field in a Slack attachment.

type SlackMessage

type SlackMessage struct {
	Channel     string            `json:"channel,omitempty"`
	Text        string            `json:"text,omitempty"`
	Username    string            `json:"username,omitempty"`
	IconEmoji   string            `json:"icon_emoji,omitempty"`
	Attachments []SlackAttachment `json:"attachments,omitempty"`
}

SlackMessage represents a Slack webhook message.

type SlackNotification

type SlackNotification interface {
	Notification
	// ToSlack returns the Slack message, or nil to skip.
	ToSlack() *SlackMessage
}

SlackNotification is for notifications that support the Slack channel.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL