diff --git a/rest/event.go b/rest/event.go index c97d1567..098aff65 100644 --- a/rest/event.go +++ b/rest/event.go @@ -5,15 +5,18 @@ import ( "gorm.io/datatypes" "gorm.io/gorm" "net/http" + "time" ) type Event struct { - gorm.Model - Type string `json:"type"` - Payload datatypes.JSONMap `json:"payload"` - Meta EventMeta `json:"meta" gorm:"embedded"` - Version int `json:"version"` - errors []error + ID string `gorm:"primarykey"` + CreatedAt time.Time + UpdatedAt time.Time + Type string `json:"type"` + Payload datatypes.JSONMap `json:"payload"` + Meta EventMeta `json:"meta" gorm:"embedded"` + Version int `json:"version"` + errors []error } type EventMeta struct { diff --git a/rest/gorm.go b/rest/gorm.go index b53a1568..03221b9d 100644 --- a/rest/gorm.go +++ b/rest/gorm.go @@ -8,6 +8,7 @@ import ( "github.com/aws/aws-sdk-go-v2/feature/rds/auth" _ "github.com/jackc/pgx/v5" "github.com/labstack/gommon/log" + "github.com/segmentio/ksuid" "go.uber.org/fx" "golang.org/x/net/context" "gorm.io/driver/mysql" @@ -324,6 +325,11 @@ func (e *GORMProjection) Persist(ctxt context.Context, logger Log, resources []R var events []*Event for _, resource := range resources { if event, ok := resource.(*Event); ok { + if event.ID == "" { + event.ID = ksuid.New().String() + } + event.CreatedAt = time.Now() + event.UpdatedAt = time.Now() events = append(events, event) } else { errs = append(errs, errors.New("resource is not an event"))