mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 00:27:31 +00:00
feat: projections auto create their tables (#3324)
* begin init checks for projections * first projection checks * debug notification providers with query fixes * more projections and first index * more projections * more projections * finish projections * fix tests (remove db name) * create tables in setup * fix logging / error handling * add tenant to views * rename tenant to instance_id * add instance_id to all projections * add instance_id to all queries * correct instance_id on projections * add instance_id to failed_events * use separate context for instance * implement features projection * implement features projection * remove unique constraint from setup when migration failed * add error to failed setup event * add instance_id to primary keys * fix IAM projection * remove old migrations folder * fix keysFromYAML test
This commit is contained in:
@@ -3,8 +3,6 @@ package projection
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/caos/logging"
|
||||
|
||||
"github.com/caos/zitadel/internal/domain"
|
||||
"github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore"
|
||||
@@ -13,18 +11,45 @@ import (
|
||||
"github.com/caos/zitadel/internal/repository/org"
|
||||
)
|
||||
|
||||
const (
|
||||
OrgProjectionTable = "projections.orgs"
|
||||
|
||||
OrgColumnID = "id"
|
||||
OrgColumnCreationDate = "creation_date"
|
||||
OrgColumnChangeDate = "change_date"
|
||||
OrgColumnResourceOwner = "resource_owner"
|
||||
OrgColumnInstanceID = "instance_id"
|
||||
OrgColumnState = "org_state"
|
||||
OrgColumnSequence = "sequence"
|
||||
OrgColumnName = "name"
|
||||
OrgColumnDomain = "primary_domain"
|
||||
)
|
||||
|
||||
type OrgProjection struct {
|
||||
crdb.StatementHandler
|
||||
}
|
||||
|
||||
const (
|
||||
OrgProjectionTable = "zitadel.projections.orgs"
|
||||
)
|
||||
|
||||
func NewOrgProjection(ctx context.Context, config crdb.StatementHandlerConfig) *OrgProjection {
|
||||
p := new(OrgProjection)
|
||||
config.ProjectionName = OrgProjectionTable
|
||||
config.Reducers = p.reducers()
|
||||
config.InitCheck = crdb.NewTableCheck(
|
||||
crdb.NewTable([]*crdb.Column{
|
||||
crdb.NewColumn(OrgColumnID, crdb.ColumnTypeText),
|
||||
crdb.NewColumn(OrgColumnCreationDate, crdb.ColumnTypeTimestamp),
|
||||
crdb.NewColumn(OrgColumnChangeDate, crdb.ColumnTypeTimestamp),
|
||||
crdb.NewColumn(OrgColumnResourceOwner, crdb.ColumnTypeText),
|
||||
crdb.NewColumn(OrgColumnInstanceID, crdb.ColumnTypeText),
|
||||
crdb.NewColumn(OrgColumnState, crdb.ColumnTypeEnum),
|
||||
crdb.NewColumn(OrgColumnSequence, crdb.ColumnTypeInt64),
|
||||
crdb.NewColumn(OrgColumnName, crdb.ColumnTypeText),
|
||||
crdb.NewColumn(OrgColumnDomain, crdb.ColumnTypeText),
|
||||
},
|
||||
crdb.NewPrimaryKey(OrgColumnInstanceID, OrgColumnID),
|
||||
crdb.NewIndex("domain_idx", []string{OrgColumnDomain}),
|
||||
crdb.NewIndex("name_idx", []string{OrgColumnName}),
|
||||
),
|
||||
)
|
||||
p.StatementHandler = crdb.NewStatementHandler(ctx, config)
|
||||
return p
|
||||
}
|
||||
@@ -59,24 +84,10 @@ func (p *OrgProjection) reducers() []handler.AggregateReducer {
|
||||
}
|
||||
}
|
||||
|
||||
type OrgColumn string
|
||||
|
||||
const (
|
||||
OrgColumnID = "id"
|
||||
OrgColumnCreationDate = "creation_date"
|
||||
OrgColumnChangeDate = "change_date"
|
||||
OrgColumnResourceOwner = "resource_owner"
|
||||
OrgColumnState = "org_state"
|
||||
OrgColumnSequence = "sequence"
|
||||
OrgColumnName = "name"
|
||||
OrgColumnDomain = "primary_domain"
|
||||
)
|
||||
|
||||
func (p *OrgProjection) reduceOrgAdded(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*org.OrgAddedEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-zWCk3", "seq", event.Sequence(), "expectedType", org.OrgAddedEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-uYq4r", "reduce.wrong.event.type")
|
||||
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.OrgAddedEventType)
|
||||
}
|
||||
return crdb.NewCreateStatement(
|
||||
e,
|
||||
@@ -85,6 +96,7 @@ func (p *OrgProjection) reduceOrgAdded(event eventstore.Event) (*handler.Stateme
|
||||
handler.NewCol(OrgColumnCreationDate, e.CreationDate()),
|
||||
handler.NewCol(OrgColumnChangeDate, e.CreationDate()),
|
||||
handler.NewCol(OrgColumnResourceOwner, e.Aggregate().ResourceOwner),
|
||||
handler.NewCol(OrgColumnInstanceID, e.Aggregate().InstanceID),
|
||||
handler.NewCol(OrgColumnSequence, e.Sequence()),
|
||||
handler.NewCol(OrgColumnName, e.Name),
|
||||
handler.NewCol(OrgColumnState, domain.OrgStateActive),
|
||||
@@ -95,8 +107,7 @@ func (p *OrgProjection) reduceOrgAdded(event eventstore.Event) (*handler.Stateme
|
||||
func (p *OrgProjection) reduceOrgChanged(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*org.OrgChangedEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-q4oq8", "seq", event.Sequence(), "expected", org.OrgChangedEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-Bg8oM", "reduce.wrong.event.type")
|
||||
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bg8oM", "reduce.wrong.event.type %s", org.OrgChangedEventType)
|
||||
}
|
||||
if e.Name == "" {
|
||||
return crdb.NewNoOpStatement(e), nil
|
||||
@@ -117,8 +128,7 @@ func (p *OrgProjection) reduceOrgChanged(event eventstore.Event) (*handler.State
|
||||
func (p *OrgProjection) reduceOrgDeactivated(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*org.OrgDeactivatedEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-1gwdc", "seq", event.Sequence(), "expectedType", org.OrgDeactivatedEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-BApK4", "reduce.wrong.event.type")
|
||||
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-BApK4", "reduce.wrong.event.type %s", org.OrgDeactivatedEventType)
|
||||
}
|
||||
return crdb.NewUpdateStatement(
|
||||
e,
|
||||
@@ -136,8 +146,7 @@ func (p *OrgProjection) reduceOrgDeactivated(event eventstore.Event) (*handler.S
|
||||
func (p *OrgProjection) reduceOrgReactivated(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*org.OrgReactivatedEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-Vjwiy", "seq", event.Sequence(), "expectedType", org.OrgReactivatedEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-o37De", "reduce.wrong.event.type")
|
||||
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-o37De", "reduce.wrong.event.type %s", org.OrgReactivatedEventType)
|
||||
}
|
||||
return crdb.NewUpdateStatement(
|
||||
e,
|
||||
@@ -155,8 +164,7 @@ func (p *OrgProjection) reduceOrgReactivated(event eventstore.Event) (*handler.S
|
||||
func (p *OrgProjection) reducePrimaryDomainSet(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*org.DomainPrimarySetEvent)
|
||||
if !ok {
|
||||
logging.LogWithFields("HANDL-79OhB", "seq", event.Sequence(), "expectedType", org.OrgDomainPrimarySetEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "HANDL-4TbKT", "reduce.wrong.event.type")
|
||||
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-4TbKT", "reduce.wrong.event.type %s", org.OrgDomainPrimarySetEventType)
|
||||
}
|
||||
return crdb.NewUpdateStatement(
|
||||
e,
|
||||
|
Reference in New Issue
Block a user