mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-15 12:27:59 +00:00
37 lines
704 B
Go
37 lines
704 B
Go
|
package eventstore
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
type Event[P any] struct {
|
||
|
Aggregate Aggregate
|
||
|
CreatedAt time.Time
|
||
|
Creator string
|
||
|
Position GlobalPosition
|
||
|
Revision uint16
|
||
|
Sequence uint32
|
||
|
Type string
|
||
|
Payload P
|
||
|
}
|
||
|
|
||
|
type StoragePayload interface {
|
||
|
Unmarshal(ptr any) error
|
||
|
}
|
||
|
|
||
|
func EventFromStorage[E Event[P], P any](event *Event[StoragePayload]) (*E, error) {
|
||
|
var payload P
|
||
|
|
||
|
if err := event.Payload.Unmarshal(&payload); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &E{
|
||
|
Aggregate: event.Aggregate,
|
||
|
CreatedAt: event.CreatedAt,
|
||
|
Creator: event.Creator,
|
||
|
Position: event.Position,
|
||
|
Revision: event.Revision,
|
||
|
Sequence: event.Sequence,
|
||
|
Type: event.Type,
|
||
|
Payload: payload,
|
||
|
}, nil
|
||
|
}
|