package notification import ( "tm/pkg/mongo" "go.mongodb.org/mongo-driver/v2/bson" ) // NotificationType represents the type of notification type NotificationType string const ( NotificationTypeInfo NotificationType = "info" NotificationTypeWarning NotificationType = "warning" NotificationTypeAlert NotificationType = "alert" NotificationTypeReject NotificationType = "reject" ) // NotificationPriority represents the priority level of notification type NotificationPriority string const ( NotificationPriorityLow NotificationPriority = "low" NotificationPriorityMedium NotificationPriority = "medium" NotificationPriorityImportant NotificationPriority = "important" ) // DeliveryChannel represents the delivery channel for notification type DeliveryChannel string const ( DeliveryChannelPush DeliveryChannel = "push" DeliveryChannelEmail DeliveryChannel = "email" ) // DeliveryStatus represents the delivery status of notification type NotificationStatus string const ( DeliveryStatusPending NotificationStatus = "pending" DeliveryStatusSent NotificationStatus = "sent" DeliveryStatusFailed NotificationStatus = "failed" ) // TargetAudienceType represents the type of target audience // Supported audience types: // - all_users: All users in the system // - specific_users: Specific users by their IDs // - all_role: All users with a specific role (e.g., all admins) // - specific_role: Users with a specific role, optionally filtered by tender // - specific_company: All users belonging to a specific company // - all_companies: All users from all companies // - specific_customer: All users belonging to a specific customer // - all_customers: All users from all customers type TargetAudienceType string const ( TargetAudienceAllUsers TargetAudienceType = "all_users" TargetAudienceSpecificUsers TargetAudienceType = "specific_users" TargetAudienceAllRole TargetAudienceType = "all_role" TargetAudienceSpecificRole TargetAudienceType = "specific_role" TargetAudienceAllCompanies TargetAudienceType = "all_companies" TargetAudienceSpecificCompany TargetAudienceType = "specific_company" TargetAudienceAllCustomers TargetAudienceType = "all_customers" TargetAudienceSpecificCustomer TargetAudienceType = "specific_customer" ) // Notification represents a notification entity type Notification struct { mongo.Model `bson:",inline"` Recipient []string `bson:"recipients"` Tender bson.ObjectID `bson:"tender"` Channels []DeliveryChannel `bson:"channels"` Type NotificationType `bson:"type"` Priority NotificationPriority `bson:"priority"` Status NotificationStatus `bson:"status"` Target TargetAudienceType `bson:"target"` Title string `bson:"title"` Description string `bson:"description"` Link *string `bson:"link"` Schedule Schedule `bson:"schedule"` } type Schedule struct { Time int64 `bson:"time"` } func (n *Notification) SetID(id string) { n.ID, _ = bson.ObjectIDFromHex(id) } func (n *Notification) GetID() string { return n.ID.Hex() } func (n *Notification) SetCreatedAt(timestamp int64) { n.CreatedAt = timestamp } func (n *Notification) SetUpdatedAt(timestamp int64) { n.UpdatedAt = timestamp } func (n *Notification) GetCreatedAt() int64 { return n.CreatedAt } func (n *Notification) GetUpdatedAt() int64 { return n.UpdatedAt }