mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 23:47:33 +00:00
96 lines
2.3 KiB
Go
96 lines
2.3 KiB
Go
package setup
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
|
|
"github.com/zitadel/zitadel/internal/database"
|
|
"github.com/zitadel/zitadel/internal/eventstore"
|
|
eventstoreV3 "github.com/zitadel/zitadel/internal/eventstore/v3"
|
|
"github.com/zitadel/zitadel/internal/repository/org"
|
|
)
|
|
|
|
type AddIDUniqueConstraintsForOrgs struct {
|
|
dbClient *database.DB
|
|
eventstore *eventstore.Eventstore
|
|
}
|
|
|
|
type orgsReadModel struct {
|
|
eventstore.ReadModel
|
|
}
|
|
|
|
func (orm *orgsReadModel) AppendEvents(events ...eventstore.Event) {
|
|
orm.ReadModel.AppendEvents(events...)
|
|
}
|
|
|
|
func (orm *orgsReadModel) Reduce() error {
|
|
return nil
|
|
}
|
|
|
|
type OrgAddEventUpdateIDUniqueConstraint struct {
|
|
*org.OrgAddedEvent
|
|
}
|
|
|
|
func (e *OrgAddEventUpdateIDUniqueConstraint) UniqueConstraints() []*eventstore.UniqueConstraint {
|
|
return []*eventstore.UniqueConstraint{org.NewAddOrgIDUniqueConstraint(e.Aggregate().ID)}
|
|
}
|
|
|
|
type OrgRemoveEventUpdateIDUniqueConstraint struct {
|
|
*org.OrgRemovedEvent
|
|
}
|
|
|
|
func (e *OrgRemoveEventUpdateIDUniqueConstraint) UniqueConstraints() []*eventstore.UniqueConstraint {
|
|
return []*eventstore.UniqueConstraint{org.NewRemoveOrgIDUniqueConstraint(e.Aggregate().ID)}
|
|
}
|
|
|
|
func (mig *AddIDUniqueConstraintsForOrgs) Execute(ctx context.Context, _ eventstore.Event) (err error) {
|
|
orm := orgsReadModel{}
|
|
sqb := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
|
|
AddQuery().
|
|
EventTypes(
|
|
org.OrgAddedEventType,
|
|
org.OrgRemovedEventType,
|
|
).
|
|
Builder()
|
|
|
|
err = mig.eventstore.FilterToReducer(ctx, sqb, &orm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var tx *sql.Tx
|
|
tx, err = mig.dbClient.BeginTx(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer func() {
|
|
if err == nil {
|
|
err = tx.Commit()
|
|
}
|
|
}()
|
|
|
|
for _, event := range orm.Events {
|
|
switch event := event.(type) {
|
|
case *org.OrgAddedEvent:
|
|
orgAddUpdateUniqueIDConstraint := OrgAddEventUpdateIDUniqueConstraint{event}
|
|
err = eventstoreV3.HandleUniqueConstraints(ctx, tx, []eventstore.Command{&orgAddUpdateUniqueIDConstraint})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
case *org.OrgRemovedEvent:
|
|
orgRemoveUpdateUniqueIDConstraint := OrgRemoveEventUpdateIDUniqueConstraint{event}
|
|
err = eventstoreV3.HandleUniqueConstraints(ctx, tx, []eventstore.Command{&orgRemoveUpdateUniqueIDConstraint})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (*AddIDUniqueConstraintsForOrgs) String() string {
|
|
return "61_add_id_unique_constraints_for_orgs"
|
|
}
|