forked from baron/baron-sso
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package domain
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// KetoOutbox status
|
|
const (
|
|
KetoOutboxStatusPending = "pending"
|
|
KetoOutboxStatusProcessed = "processed"
|
|
KetoOutboxStatusFailed = "failed"
|
|
)
|
|
|
|
// KetoOutbox action
|
|
const (
|
|
KetoOutboxActionCreate = "CREATE"
|
|
KetoOutboxActionDelete = "DELETE"
|
|
)
|
|
|
|
// KetoOutbox represents a Keto relationship tuple update event.
|
|
type KetoOutbox struct {
|
|
ID string `gorm:"primaryKey;type:uuid;default:gen_random_uuid()" json:"id"`
|
|
Namespace string `gorm:"not null" json:"namespace"`
|
|
Object string `gorm:"not null" json:"object"`
|
|
Relation string `gorm:"not null" json:"relation"`
|
|
Subject string `gorm:"not null" json:"subject"` // format: "User:ID" or "Tenant:ID#members"
|
|
Action string `gorm:"not null" json:"action"` // CREATE, DELETE
|
|
Status string `gorm:"default:'pending';index" json:"status"`
|
|
RetryCount int `gorm:"default:0" json:"retryCount"`
|
|
LastError string `json:"lastError,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
ProcessedAt *time.Time `json:"processedAt,omitempty"`
|
|
}
|
|
|
|
func (ko *KetoOutbox) TableName() string {
|
|
return "keto_outbox"
|
|
}
|
|
|
|
func (ko *KetoOutbox) BeforeCreate(tx *gorm.DB) (err error) {
|
|
if ko.ID == "" {
|
|
ko.ID = uuid.NewString()
|
|
}
|
|
return
|
|
}
|