Yimaru-BackEnd/internal/domain/notification.go

126 lines
5.2 KiB
Go

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"
NOTIFICATION_TYPE_PAYMENT_VERIFIED NotificationType = "payment_verified"
NOTIFICATION_TYPE_SUBSCRIPTION_ACTIVATED NotificationType = "subscription_activated"
NOTIFICATION_TYPE_COURSE_CREATED NotificationType = "course_created"
NOTIFICATION_TYPE_SUB_COURSE_CREATED NotificationType = "sub_course_created"
NOTIFICATION_TYPE_VIDEO_ADDED NotificationType = "video_added"
NOTIFICATION_TYPE_ISSUE_STATUS_UPDATED NotificationType = "issue_status_updated"
NOTIFICATION_TYPE_ISSUE_CREATED NotificationType = "issue_created"
NOTIFICATION_TYPE_ADMIN_CREATED NotificationType = "admin_created"
NOTIFICATION_TYPE_TEAM_MEMBER_CREATED NotificationType = "team_member_created"
NOTIFICATION_TYPE_USER_DELETED NotificationType = "user_deleted"
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 ""
}
}