package domain import ( "encoding/json" "time" ) type NotificationType string type NotificationRecieverSide string type NotificationDeliveryScheme string type NotificationLevel string type NotificationErrorSeverity string type NotificationDeliveryStatus string type DeliveryChannel string const ( NOTIFICATION_TYPE_KNOWLEDGE_LEVEL_UPDATE NotificationType = "knowledge_level_update" NotificationRecieverSideAdmin NotificationRecieverSide = "admin" NotificationRecieverSideCustomer NotificationRecieverSide = "customer" NotificationRecieverSideCashier NotificationRecieverSide = "cashier" NotificationRecieverSideBranchManager NotificationRecieverSide = "branch_manager" NotificationDeliverySchemeBulk NotificationDeliveryScheme = "bulk" NotificationDeliverySchemeSingle NotificationDeliveryScheme = "single" NotificationLevelInfo NotificationLevel = "info" NotificationLevelError NotificationLevel = "error" NotificationLevelWarning NotificationLevel = "warning" NotificationLevelSuccess NotificationLevel = "success" NotificationErrorSeverityLow NotificationErrorSeverity = "low" NotificationErrorSeverityMedium NotificationErrorSeverity = "medium" NotificationErrorSeverityHigh NotificationErrorSeverity = "high" NotificationErrorSeverityCritical NotificationErrorSeverity = "critical" NotificationErrorSeverityFatal NotificationErrorSeverity = "fatal" DeliveryStatusPending NotificationDeliveryStatus = "pending" DeliveryStatusSent NotificationDeliveryStatus = "sent" DeliveryStatusFailed NotificationDeliveryStatus = "failed" DeliveryChannelEmail DeliveryChannel = "email" DeliveryChannelSMS DeliveryChannel = "sms" DeliveryChannelPush DeliveryChannel = "push" DeliveryChannelInApp DeliveryChannel = "in-app" ) type NotificationPayload struct { Headline string `json:"headline"` Message string `json:"message"` Tags []string `json:"tags"` } type Notification struct { ID string `json:"id"` RecipientID int64 `json:"recipient_id"` Type NotificationType `json:"type"` Level NotificationLevel `json:"level"` ErrorSeverity NotificationErrorSeverity `json:"error_severity"` Reciever NotificationRecieverSide `json:"reciever"` IsRead bool `json:"is_read"` DeliveryStatus NotificationDeliveryStatus `json:"delivery_status,omitempty"` DeliveryChannel DeliveryChannel `json:"delivery_channel,omitempty"` Payload NotificationPayload `json:"payload"` Priority int `json:"priority,omitempty"` Version int `json:"-"` Timestamp time.Time `json:"timestamp"` Expires time.Time `json:"expires"` Image string `json:"image"` Metadata json.RawMessage `json:"metadata,omitempty"` } type CreateNotification struct { RecipientID int64 `json:"recipient_id"` Type NotificationType `json:"type"` Level NotificationLevel `json:"level"` ErrorSeverity *NotificationErrorSeverity `json:"error_severity"` Reciever NotificationRecieverSide `json:"reciever"` IsRead bool `json:"is_read"` DeliveryStatus NotificationDeliveryStatus `json:"delivery_status,omitempty"` DeliveryChannel DeliveryChannel `json:"delivery_channel,omitempty"` Payload NotificationPayload `json:"payload"` Priority int `json:"priority,omitempty"` Expires time.Time `json:"expires"` Image string `json:"image,omitempty"` Metadata json.RawMessage `json:"metadata,omitempty"` } func (n *Notification) ToJSON() ([]byte, error) { return json.Marshal(n) } func FromJSON(data []byte) (*Notification, error) { var n Notification err := json.Unmarshal(data, &n) if err != nil { return nil, err } return &n, nil } func ReceiverFromRole(role Role) NotificationRecieverSide { switch role { case RoleAdmin: return NotificationRecieverSideAdmin case RoleSuperAdmin: return NotificationRecieverSideAdmin case RoleStudent: return NotificationRecieverSideCustomer case RoleInstructor: return NotificationRecieverSideCustomer default: return "" } }