0857314906
- Updated the NotificationRequest struct to include new fields: Title, Type, Priority, and ScheduledAt, improving the flexibility and usability of notification requests. - Implemented validation for the new ScheduledAt field to ensure it is a future timestamp or zero for immediate delivery. - Refactored the NotificationService interface and SDK methods to accept a new Model struct, streamlining the parameters for sending notifications. - Enhanced the builder pattern for constructing notification requests, adding methods for setting Title, Type, Priority, and ScheduledAt, promoting a fluent API design. - Updated service methods for sending notifications (Email, SMS, Push, OTP) to utilize the new Model struct, ensuring consistency across notification types.
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package notification
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
// NotificationService defines the interface for notification operations
|
|
type NotificationService interface {
|
|
// SendNotification sends a notification using the configured client
|
|
SendNotification(ctx context.Context, req *NotificationRequest) (*NotificationResponse, error)
|
|
|
|
// SendEmail sends an email notification
|
|
SendEmail(ctx context.Context, model Model) (*NotificationResponse, error)
|
|
|
|
// SendSMS sends an SMS notification
|
|
SendSMS(ctx context.Context, model Model) (*NotificationResponse, error)
|
|
|
|
// SendPush sends a push notification
|
|
SendPush(ctx context.Context, model Model) (*NotificationResponse, error)
|
|
|
|
// SendOTP sends an OTP notification
|
|
SendOTP(ctx context.Context, model Model) (*NotificationResponse, error)
|
|
|
|
// Health checks if the notification service is available
|
|
Health(ctx context.Context) error
|
|
|
|
// NewBuilder creates a new notification builder
|
|
NewBuilder() Builder
|
|
}
|
|
|
|
// Builder provides a fluent interface for building notification requests
|
|
type Builder interface {
|
|
// SetEventType sets the event type
|
|
SetEventType(eventType EventType) Builder
|
|
|
|
// SetMessage sets the notification message
|
|
SetMessage(message string) Builder
|
|
|
|
// SetUserID sets the user ID
|
|
SetUserID(userID string) Builder
|
|
|
|
// SetEmail sets the email address
|
|
SetEmail(email string) Builder
|
|
|
|
// SetSMS sets the SMS phone number
|
|
SetSMS(phoneNumber string) Builder
|
|
|
|
// SetPush sets the push device token
|
|
SetPush(deviceToken string) Builder
|
|
|
|
// SetOTP sets the OTP phone number
|
|
SetOTP(phoneNumber string) Builder
|
|
|
|
// SetTitle sets the notification title
|
|
SetTitle(title string) Builder
|
|
|
|
// SetType sets the notification type
|
|
SetType(notificationType string) Builder
|
|
|
|
// SetPriority sets the notification priority
|
|
SetPriority(priority string) Builder
|
|
|
|
// SetScheduledAt sets the scheduled delivery time (0 for immediate)
|
|
SetScheduledAt(scheduledAt int64) Builder
|
|
|
|
// Build creates the notification request
|
|
Build() (*NotificationRequest, error)
|
|
|
|
// Send builds and sends the notification
|
|
Send(ctx context.Context) (*NotificationResponse, error)
|
|
}
|