package models import ( "time" ) // NotificationPreference represents the notifications_notificationpreference table type NotificationPreference struct { BaseModel UserID uint `gorm:"column:user_id;uniqueIndex;not null" json:"user_id"` // Task notifications TaskDueSoon bool `gorm:"column:task_due_soon;default:true" json:"task_due_soon"` TaskOverdue bool `gorm:"column:task_overdue;default:true" json:"task_overdue"` TaskCompleted bool `gorm:"column:task_completed;default:true" json:"task_completed"` TaskAssigned bool `gorm:"column:task_assigned;default:true" json:"task_assigned"` // Residence notifications ResidenceShared bool `gorm:"column:residence_shared;default:true" json:"residence_shared"` // Document notifications WarrantyExpiring bool `gorm:"column:warranty_expiring;default:true" json:"warranty_expiring"` // Email preferences EmailTaskCompleted bool `gorm:"column:email_task_completed;default:true" json:"email_task_completed"` } // TableName returns the table name for GORM func (NotificationPreference) TableName() string { return "notifications_notificationpreference" } // NotificationType represents the type of notification type NotificationType string const ( NotificationTaskDueSoon NotificationType = "task_due_soon" NotificationTaskOverdue NotificationType = "task_overdue" NotificationTaskCompleted NotificationType = "task_completed" NotificationTaskAssigned NotificationType = "task_assigned" NotificationResidenceShared NotificationType = "residence_shared" NotificationWarrantyExpiring NotificationType = "warranty_expiring" ) // Notification represents the notifications_notification table type Notification struct { BaseModel UserID uint `gorm:"column:user_id;index;not null" json:"user_id"` User User `gorm:"foreignKey:UserID" json:"-"` NotificationType NotificationType `gorm:"column:notification_type;size:50;not null" json:"notification_type"` Title string `gorm:"column:title;size:200;not null" json:"title"` Body string `gorm:"column:body;type:text;not null" json:"body"` // Related object (optional) TaskID *uint `gorm:"column:task_id" json:"task_id"` // Task *Task `gorm:"foreignKey:TaskID" json:"task,omitempty"` // Uncomment when Task model is implemented // Additional data (JSON) Data string `gorm:"column:data;type:jsonb;default:'{}'" json:"data"` // Delivery tracking Sent bool `gorm:"column:sent;default:false" json:"sent"` SentAt *time.Time `gorm:"column:sent_at" json:"sent_at"` // Read tracking Read bool `gorm:"column:read;default:false" json:"read"` ReadAt *time.Time `gorm:"column:read_at" json:"read_at"` // Error handling ErrorMessage string `gorm:"column:error_message;type:text" json:"error_message,omitempty"` } // TableName returns the table name for GORM func (Notification) TableName() string { return "notifications_notification" } // MarkAsRead marks the notification as read func (n *Notification) MarkAsRead() { n.Read = true now := time.Now().UTC() n.ReadAt = &now } // MarkAsSent marks the notification as sent func (n *Notification) MarkAsSent() { n.Sent = true now := time.Now().UTC() n.SentAt = &now } // APNSDevice represents iOS devices for push notifications type APNSDevice struct { ID uint `gorm:"primaryKey" json:"id"` Name string `gorm:"column:name;size:255" json:"name"` Active bool `gorm:"column:active;default:true" json:"active"` UserID *uint `gorm:"column:user_id;index" json:"user_id"` User *User `gorm:"foreignKey:UserID" json:"-"` DeviceID string `gorm:"column:device_id;size:255" json:"device_id"` RegistrationID string `gorm:"column:registration_id;uniqueIndex;size:255" json:"registration_id"` DateCreated time.Time `gorm:"column:date_created;autoCreateTime" json:"date_created"` } // TableName returns the table name for GORM func (APNSDevice) TableName() string { return "push_notifications_apnsdevice" } // GCMDevice represents Android devices for push notifications type GCMDevice struct { ID uint `gorm:"primaryKey" json:"id"` Name string `gorm:"column:name;size:255" json:"name"` Active bool `gorm:"column:active;default:true" json:"active"` UserID *uint `gorm:"column:user_id;index" json:"user_id"` User *User `gorm:"foreignKey:UserID" json:"-"` DeviceID string `gorm:"column:device_id;size:255" json:"device_id"` RegistrationID string `gorm:"column:registration_id;uniqueIndex;size:255" json:"registration_id"` CloudMessageType string `gorm:"column:cloud_message_type;size:3;default:'FCM'" json:"cloud_message_type"` DateCreated time.Time `gorm:"column:date_created;autoCreateTime" json:"date_created"` } // TableName returns the table name for GORM func (GCMDevice) TableName() string { return "push_notifications_gcmdevice" }