service backend
This commit is contained in:
35
api/ledger/internal/model/outbox.go
Normal file
35
api/ledger/internal/model/outbox.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package ledger
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/tech/sendico/pkg/db/storable"
|
||||
"github.com/tech/sendico/pkg/mservice"
|
||||
)
|
||||
|
||||
// Delivery status enum
|
||||
type OutboxStatus string
|
||||
|
||||
const (
|
||||
OutboxPending OutboxStatus = "pending"
|
||||
OutboxSent OutboxStatus = "sent"
|
||||
OutboxFailed OutboxStatus = "failed" // terminal after max retries, or keep pending with NextAttemptAt=nil
|
||||
)
|
||||
|
||||
type OutboxEvent struct {
|
||||
storable.Base `bson:",inline" json:",inline"`
|
||||
|
||||
EventID string `bson:"eventId" json:"eventId"` // deterministic; use as NATS Msg-Id
|
||||
Subject string `bson:"subject" json:"subject"` // NATS subject / stream routing key
|
||||
Payload []byte `bson:"payload" json:"payload"` // JSON (or other) payload
|
||||
Status OutboxStatus `bson:"status" json:"status"` // enum
|
||||
Attempts int `bson:"attempts" json:"attempts"` // total tries
|
||||
NextAttemptAt *time.Time `bson:"nextAttemptAt,omitempty" json:"nextAttemptAt,omitempty"` // for backoff scheduler
|
||||
SentAt *time.Time `bson:"sentAt,omitempty" json:"sentAt,omitempty"`
|
||||
LastError string `bson:"lastError,omitempty" json:"lastError,omitempty"` // brief reason of last failure
|
||||
CorrelationRef string `bson:"correlationRef,omitempty" json:"correlationRef,omitempty"` // e.g., journalEntryRef or idempotencyKey
|
||||
}
|
||||
|
||||
func (o *OutboxEvent) Collection() string {
|
||||
return mservice.LedgerOutbox
|
||||
}
|
||||
Reference in New Issue
Block a user