165 lines
3.7 KiB
Go
Raw Normal View History

2020-11-06 17:25:07 +01:00
package policy
import (
"encoding/json"
2020-11-06 17:25:07 +01:00
"github.com/caos/zitadel/internal/errors"
2020-11-06 17:25:07 +01:00
"github.com/caos/zitadel/internal/eventstore/v2"
"github.com/caos/zitadel/internal/eventstore/v2/repository"
2020-11-06 17:25:07 +01:00
)
const (
2020-11-06 22:09:19 +01:00
LabelPolicyAddedEventType = "policy.label.added"
LabelPolicyChangedEventType = "policy.label.changed"
LabelPolicyRemovedEventType = "policy.label.removed"
2020-11-06 17:25:07 +01:00
)
2020-11-06 22:09:19 +01:00
type LabelPolicyAggregate struct {
eventstore.Aggregate
}
2020-11-11 17:51:44 +01:00
type LabelPolicyReadModel struct {
eventstore.ReadModel
PrimaryColor string
SecondaryColor string
}
func (rm *LabelPolicyReadModel) Reduce() error {
for _, event := range rm.Events {
switch e := event.(type) {
case *LabelPolicyAddedEvent:
rm.PrimaryColor = e.PrimaryColor
rm.SecondaryColor = e.SecondaryColor
case *LabelPolicyChangedEvent:
rm.PrimaryColor = e.PrimaryColor
rm.SecondaryColor = e.SecondaryColor
}
}
return rm.ReadModel.Reduce()
}
type LabelPolicyWriteModel struct {
eventstore.WriteModel
PrimaryColor string
SecondaryColor string
}
func (wm *LabelPolicyWriteModel) Reduce() error {
return errors.ThrowUnimplemented(nil, "POLIC-xJjvN", "reduce unimpelemnted")
}
2020-11-06 17:25:07 +01:00
type LabelPolicyAddedEvent struct {
eventstore.BaseEvent `json:"-"`
2020-11-27 11:30:56 +01:00
PrimaryColor string `json:"primaryColor,omitempty"`
SecondaryColor string `json:"secondaryColor,omitempty"`
2020-11-06 17:25:07 +01:00
}
func (e *LabelPolicyAddedEvent) CheckPrevious() bool {
return true
}
func (e *LabelPolicyAddedEvent) Data() interface{} {
return e
}
func NewLabelPolicyAddedEvent(
base *eventstore.BaseEvent,
2020-11-06 17:25:07 +01:00
primaryColor,
secondaryColor string,
) *LabelPolicyAddedEvent {
return &LabelPolicyAddedEvent{
BaseEvent: *base,
2020-11-06 17:25:07 +01:00
PrimaryColor: primaryColor,
SecondaryColor: secondaryColor,
}
}
2020-11-06 22:09:19 +01:00
func LabelPolicyAddedEventMapper(event *repository.Event) (eventstore.EventReader, error) {
e := &LabelPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-puqv4", "unable to unmarshal label policy")
}
return e, nil
}
2020-11-06 22:09:19 +01:00
type LabelPolicyChangedEvent struct {
eventstore.BaseEvent `json:"-"`
2020-11-11 17:51:44 +01:00
PrimaryColor string `json:"primaryColor,omitempty"`
SecondaryColor string `json:"secondaryColor,omitempty"`
2020-11-06 22:09:19 +01:00
}
func (e *LabelPolicyChangedEvent) CheckPrevious() bool {
return true
}
func (e *LabelPolicyChangedEvent) Data() interface{} {
2020-11-11 17:51:44 +01:00
return e
2020-11-06 22:09:19 +01:00
}
func NewLabelPolicyChangedEvent(
base *eventstore.BaseEvent,
current *LabelPolicyWriteModel,
primaryColor,
secondaryColor string,
2020-11-06 22:09:19 +01:00
) *LabelPolicyChangedEvent {
2020-11-11 17:51:44 +01:00
e := &LabelPolicyChangedEvent{
BaseEvent: *base,
2020-11-06 22:09:19 +01:00
}
if primaryColor != "" && current.PrimaryColor != primaryColor {
e.PrimaryColor = primaryColor
2020-11-11 17:51:44 +01:00
}
if secondaryColor != "" && current.SecondaryColor != secondaryColor {
e.SecondaryColor = secondaryColor
2020-11-11 17:51:44 +01:00
}
return e
2020-11-06 22:09:19 +01:00
}
func LabelPolicyChangedEventMapper(event *repository.Event) (eventstore.EventReader, error) {
e := &LabelPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
err := json.Unmarshal(event.Data, e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-qhfFb", "unable to unmarshal label policy")
}
return e, nil
}
2020-11-06 22:09:19 +01:00
type LabelPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
func (e *LabelPolicyRemovedEvent) CheckPrevious() bool {
return true
}
func (e *LabelPolicyRemovedEvent) Data() interface{} {
return nil
}
func NewLabelPolicyRemovedEvent(base *eventstore.BaseEvent) *LabelPolicyRemovedEvent {
2020-11-06 22:09:19 +01:00
return &LabelPolicyRemovedEvent{
BaseEvent: *base,
2020-11-06 22:09:19 +01:00
}
}
func LabelPolicyRemovedEventMapper(event *repository.Event) (eventstore.EventReader, error) {
return &LabelPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
}