46 lines
1.7 KiB
Go
46 lines
1.7 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type PushProvider int
|
|
|
|
const (
|
|
PushProviderApple PushProvider = iota
|
|
PushProviderGoogle
|
|
)
|
|
|
|
type Notification struct {
|
|
Id uuid.UUID `gorm:"primarykey;type:uuid;default:gen_random_uuid()" json:"id"`
|
|
Topic string `gorm:"not null;size:1024" json:"topic"`
|
|
Title *string `json:"title"`
|
|
Subtitle *string `json:"subtitle"`
|
|
Content *string `json:"content"`
|
|
Meta map[string]any `gorm:"type:jsonb;default:'{}'::jsonb;not null" json:"meta"`
|
|
Priority int `gorm:"default:10" json:"priority"`
|
|
ViewedAt *time.Time `json:"viewed_at"`
|
|
AccountId uuid.UUID `gorm:"type:uuid;not null" json:"account_id"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
|
|
}
|
|
|
|
type NotificationPushSubscription struct {
|
|
Id uuid.UUID `gorm:"primarykey;type:uuid;default:gen_random_uuid()" json:"id"`
|
|
AccountId uuid.UUID `gorm:"type:uuid;not null;uniqueIndex:account_device_deleted" json:"account_id"`
|
|
DeviceId string `gorm:"not null;size:8192;uniqueIndex:account_device_deleted" json:"device_id"`
|
|
DeviceToken string `gorm:"not null;size:8192" json:"device_token"`
|
|
Provider PushProvider `gorm:"not null" json:"provider"`
|
|
CountDelivered int `gorm:"default:0" json:"count_delivered"`
|
|
LastUsedAt *time.Time `json:"last_used_at"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"uniqueIndex:account_device_deleted,index" json:"deleted_at"`
|
|
}
|